如何从TableAdapter检索存储过程返回值

时间:2020-03-05 18:58:22  来源:igfitidea点击:

使用TableAdapters时,我找不到从存储过程获取返回值的优雅方法。

使用非标量存储过程调用时,TableAdapter似乎不支持SQL存储过程返回值。我们希望自动生成的函数的返回值将是存储过程的返回值,但实际上不是(实际上是受影响的行数)。尽管可以使用'out'参数并将变量作为对自动生成函数的引用进行传递,但这并不是一个很干净的解决方案。

我已经在网络上看到一些丑陋的骇客来解决这个问题,但是还没有一个不错的解决方案。任何帮助,将不胜感激。

解决方案

回答

获取返回值的方法是在SqlCommand对象上使用SqlParameter,该对象的Direction设置为ParameterDirection.ReturnValue。我们应该在调用Fill之后检查TableAdapter的SelectCommand属性。

回答

我不能肯定地说,因为我没有使用TableAdapters,但是我们可能需要查看存储过程,并在过程中包括以下内容。

SET ROWCOUNT OFF

BEGIN
<Procedure Content>
END

SET ROWCOUNT ON

回答

注意:的方法是使用SqlParameter,其中Direction = ParameterDirection.ReturnValue

话虽如此,就像已经提到过SqlParameters的人一样,这里是使用DataSet的动态方法替代方法。 (如果这就是骑行方式):

示例SQL语句和Cas休假:

string sql = @"DECLARE @ret int 
            EXEC @ret = SP_DoStuff 'parm1', 'parm2'
            SELECT @ret as ret";

DataSet ds = GetDatasetFromSQL(sql); //your sql to dataset code here...

int resultCode = -1;
int.TryParse(ds.Tables[ds.Tables.Count-1].Rows[0][0].ToString(), out resultCode);

将存储过程的结果加载到DataSet中,并将具有与存储过程中的返回选择语句一样多的DataTables。

数据集中的最后一个数据表将具有1行和1列,其中将包含存储过程的返回值。

回答

关闭此问题,因为它似乎不支持返回值,并且没有完善的解决方法!

回答

http://blogs.msdn.com/smartclientdata/archive/2006/08/09/693113.aspx