如何从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