存储过程的返回值不正确

时间:2017-01-27 04:21:35

标签: sql-server vb.net stored-procedures

我在SQL Server 2016中有这个存储过程:

SET NOCOUNT ON;
SELECT * FROM MyTable;
RETURN  @@ROWCOUNT

当我在SSMS中运行此过程时,返回值为43,应该是。

我的应用程序中有这段代码:

com = New SqlCommand("MyQuery", conn)
com.CommandType = CommandType.StoredProcedure
prm = New SqlParameter
With prm
    .DbType = DbType.Int32
    .Direction = ParameterDirection.ReturnValue
End With
com.Parameters.Add(prm)
conn.Open()
Dim rdr As SqlDataReader = com.ExecuteReader
While rdr.Read
    Debug.WriteLine(rdr(0))
End While
Debug.Write(prm.Value Is Nothing)

While循环中的Debug语句打印出第一列中的所有数据,因此我知道它们一起工作但最终Debug语句的结果为True。为什么我没有得到我的回报值?

编辑: 答案在我的应用程序代码中,而不是在SQL中。保留SQL原样,我通过将prm循环中的第二行更改为:

来修改我的代码
RetVal = ParameterDirection.ReturnValue

现在,RetVal包含返回值。现在看来这显然是有道理的。

2 个答案:

答案 0 :(得分:0)

请按以下说明更新查询。

SELECT * FROM MyTable;
SELECT  @@ROWCOUNT as Row_Count

更新SP后,获取数据集和数据集第二表中的数据,您将得到行数的值。

答案 1 :(得分:0)

尝试稍微修改存储过程:

DECLARE @RetVal int
SET NOCOUNT ON;
SELECT * FROM MyTable;
SET @RetVal = @@ROWCOUNT
RETURN  @RetVal

如果这不起作用,请尝试使用

设置@RetVal
SELECT @RetVal = COUNT(*) FROM MyTable