未设置存储过程的返回值

时间:2009-06-12 04:18:30

标签: sql stored-procedures return-value

我有以下非常基本的存储过程:

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”(存储过程非常简单,以便我可以找到它为什么不工作的底部)。

根据我在网上看到的多个例子,这应该有用。

任何人都有任何关于它为什么没有的建议?

5 个答案:

答案 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条记录”。