Возвращаемое значение из хранимой процедуры не установлено - PullRequest
0 голосов
/ 12 июня 2009

У меня есть следующая базовая хранимая процедура:

ПРОЦЕДУРА СОЗДАНИЯ [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

Проблема в том, что все, что я когда-либо получаю в виде ResultValue, это «0», когда я должен получить «999» (сохраненный процесс очень урезан, чтобы я мог понять, почему он не работает). *

Согласно многочисленным примерам, которые я видел в Интернете, это должно работать.

Кто-нибудь получил какие-либо предложения относительно того, почему это не так?

Ответы [ 5 ]

2 голосов
/ 12 июня 2009

Ваш сохраненный процесс, очевидно, в порядке, я не использую EntLib, я думаю, что ваша проблема в строке

cmd = actionDB.GetSqlStringCommand(lDBCommand)

Попробуйте использовать это вместо

cmd = actionDB.GetStoredProcCommand(lDBCommand)
1 голос
/ 12 июня 2009

попробовал

ResultValue = SQLreturnValue.Value.ToString() 

Я думаю, что это просто синтаксис, который не должен делать различий.

У меня лично нет имени для моего возвращаемого параметра, и он отлично работает:

var returnCode = new SqlParameter();
returnCode.Direction = System.Data.ParameterDirection.ReturnValue;
returnCode.DbType = System.Data.DbType.Int32;

Может быть, имя RETURN_VALUE мешает ему?

0 голосов
/ 13 апреля 2010

Я предполагаю, что ваш код плохо обрабатывает результат. Краткий ответ: попробуйте изменить хранимую процедуру на:

CREATE PROCEDURE [dbo].[GetNumberToProcess]

AS

SET NOCOUNT ON
RETURN 999

GO

Параметр NOCOUNT не позволяет SQL отправлять «1 запись (и)», которые могут повлиять на возвращаемое значение.

0 голосов
/ 12 июня 2009

Если вы собираетесь вернуть выходной параметр вместо результирующего набора, вам нужно объявить выходной параметр в sproc и присвоить ему значение.

ПРОЦЕДУРА СОЗДАНИЯ [dbo]. [GetNumberToProcess] ( @rtInt as int OUT ) AS

выберите @rtInt = 999


Dim SQLreturnValue As New SqlParameter ("@ rtInt", DbType.Int32)

ResultValue = cmd.Parameters ("@ rtInt"). Value.ToString

0 голосов
/ 12 июня 2009

Измените вашу процедуру на ДЕЙСТВИТЕЛЬНО простую:

ALTER PROCEDURE [dbo].[GetNumberToProcess] AS RETURN 999

ResultValue по-прежнему равен 0 после этого изменения?

...