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

时间:2008-09-17 09:12:14

标签: asp.net sql-server

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

使用非标量存储过程调用时,TableAdapter似乎不支持SQL存储过程返回值。您希望自动生成函数的返回值是来自存储过程的返回值,但它不是(它实际上是受影响的行数)。虽然可以使用'out'参数并将变量作为ref传递给自动生成的函数,但它不是一个非常干净的解决方案。

我在网上看到了一些丑陋的黑客来解决这个问题,但没有像样的解决方案。任何帮助将不胜感激。

6 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

据说,正如有人已经提到的SqlParameters,这里是一个使用DataSet的动态方法替代。 (如果那就是你的骑行方式):

示例SQL语句和C#作为休眠:

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中,并且将具有与存储过程中的return select语句一样多的DataTable。

DataSet中的最后一个DataTable将包含1行和1列,其中包含存储过程返回值。

答案 2 :(得分:1)

答案 3 :(得分:1)

实际上,您需要做的就是使用SELECT语句而不是RETURN语句从存储过程返回最终值。 SELECT的结果将是返回值。例如,如果您只是将sp退出语句设置为“SELECT 1”,那么您将返回1.现在只需选择要返回的实际标量。

答案 4 :(得分:0)

我无法肯定地说,因为我没有使用TableAdapter,但您可能需要查看存储过程并在程序中包含以下内容。

SET ROWCOUNT OFF

BEGIN
<Procedure Content>
END

SET ROWCOUNT ON

答案 5 :(得分:0)

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