【发布时间】:2017-01-27 04:21:34
【问题描述】:
我在 SQL Server 2016 中有这个存储过程:
SET NOCOUNT ON;
SELECT * FROM MyTable;
RETURN @@ROWCOUNT
当我在 SSMS 中运行此过程时,返回值应该是 43。
我的应用程序中有这个代码 sn-p:
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 包含返回值。现在看来,这是有道理的。
【问题讨论】:
-
你只需要一个表的行数?
-
是的,您只需要行数还是需要数据和行数?
-
如果我是对的,“ReturnValue”是针对存储过程的。如果您正在执行普通的 SELECT ... 那么返回的值是 DataReader 的字段。
-
我将所有返回的数据用于其他目的,所以,不,我需要的不仅仅是行数......
-
@muffi 让我做两个 cmets。首先,在 SSMS 中执行存储的查询会返回行并将返回值设置为行数。由于这两个值都是由 SQL 生成的,所以在我看来,我应该能够得到它们。特别是鉴于“ReturnValue”是参数允许的方向之一。其次,假设这不是真的。除了行之外,还有什么方法可以从数据库中获取返回值(或其他参数)?
标签: sql-server vb.net stored-procedures