我在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包含返回值。现在看来这显然是有道理的。
答案 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
如果这不起作用,请尝试使用
设置@RetValSELECT @RetVal = COUNT(*) FROM MyTable