我有以下非常基本的存储过程:
CREATE PROCEDURE [dbo]。[GetNumberToProcess]
AS
返回999
然后我使用Enterprise Library运行一些代码并获取返回值:
Dim cmd As DbCommand
Dim ResultValue as String
Dim lDBCommand as String = "dbo.GetNumberToProcess"
Dim actionDB As Sql.SqlDatabase = New Sql.SqlDatabase(lConnectionString)
cmd = actionDB.GetSqlStringCommand(lDBCommand)
Dim SQLreturnValue As New SqlParameter("RETURN_VALUE", DbType.Int32)
SQLreturnValue.Direction = ParameterDirection.ReturnValue
cmd.Parameters.Add(SQLreturnValue)
' Execute the command and put the result into the ResultValue for later processing
actionDB.ExecuteNonQuery(cmd).ToString()
ResultValue = cmd.Parameters("RETURN_VALUE").Value.ToString
问题是,当我得到“999”时,所有我回到ResultValue都是“0”(存储过程非常简单,以便我可以找到它为什么不工作的底部)。
根据我在网上看到的多个例子,这应该有用。
任何人都有任何关于它为什么没有的建议?
答案 0 :(得分:2)
你的存储过程显然很好,我不使用EntLib我觉得你的问题就行了
cmd = actionDB.GetSqlStringCommand(lDBCommand)
尝试使用此代替
cmd = actionDB.GetStoredProcCommand(lDBCommand)
答案 1 :(得分:1)
有你的尝试
ResultValue = SQLreturnValue.Value.ToString()
我认为这只是一个语法问题,不应该做出差异。
我个人没有返回参数的名称,并且工作正常:
var returnCode = new SqlParameter();
returnCode.Direction = System.Data.ParameterDirection.ReturnValue;
returnCode.DbType = System.Data.DbType.Int32;
可能名称RETURN_VALUE正在弄乱吗?
答案 2 :(得分:0)
将您的程序改为非常简单:
ALTER PROCEDURE [dbo].[GetNumberToProcess] AS RETURN 999
此更改后ResultValue是否仍然为0?
答案 3 :(得分:0)
如果要返回输出参数而不是结果集,则需要在sproc中声明输出参数并为其赋值。
CREATE PROCEDURE [dbo]。[GetNumberToProcess] ( @rtInt为int OUT ) AS
选择@rtInt = 999
Dim SQLreturnValue As New SqlParameter(“@ rtInt”,DbType.Int32)
ResultValue = cmd.Parameters(“@ rtInt”)。Value.ToString
答案 4 :(得分:0)
我的猜测是你的代码没有很好地处理结果。简短回答:尝试将存储过程更改为:
CREATE PROCEDURE [dbo].[GetNumberToProcess]
AS
SET NOCOUNT ON
RETURN 999
GO
NOCOUNT设置将阻止SQL发送可能影响您的返回值的“受影响的1条记录”。