Как я могу получить возвращаемое значение хранимой процедуры в C #? - PullRequest
2 голосов
/ 26 июня 2010

У меня есть хранимая процедура, которая выполняет некоторую операцию и возвращает 1 или 0, как показано ниже

CREATE PROCEDURE dbo.UserCheckUsername11
(
    @Username nvarchar(50)
)
AS
BEGIN
SET NOCOUNT ON;

IF Exists(SELECT UserID FROM User WHERE username =@Username) 
    return 1
ELSE
    return 0
END

и в C # я хочу получить это возвращаемое значение, которое я пытаюсь ExcuteScalar, но оно не вернуло никакого значения (я знаю, что если я заменю return 0 на Select 0 ExcuteScalar, то это будет кешировано ... но так ли это любой способ, который позволяет мне получить возвращаемое значение с заменой return на select?

ПРИМЕЧАНИЕ: я не хочу, чтобы пользовательский выходной параметр хранимой процедуры также

Ответы [ 4 ]

7 голосов
/ 26 июня 2010

По сути, вы должны определить параметр с возвращаемым значением "direction".

Некоторые примеры можно найти здесь: Использование ADO.NET с SQL Server и здесь: Получение возвращаемого значения из хранимой процедуры SQL .

Вот соответствующая часть из первой цитируемой ссылки:

Чтобы получить значение ВОЗВРАТА заявление, вам нужно сделать следующее:

// add a new parameter, with any name we want - its for our own
// use only
SqlParameter sqlParam = com.Parameters.Add("@ReturnValue", SqlDbType.Int);
// set the direction flag so that it will be filled with the return value
myParm.Direction = ParameterDirection.ReturnValue;

Затем, после того как хранимая процедура было выполнено,

int returnValue = (int)com.Parameters["@ReturnValue"].Value

вернет значение, которое было установлено.

4 голосов
/ 26 июня 2010

При добавлении параметров указывается направление параметра «возвращаемое значение»:

var param = cmd.Parameters.Add(cmd.CreateParameter());
param.Direction = System.Data.ParameterDirection.ReturnValue;

Проверьте .Value этого параметра после вызова (ExecuteNonQuery), и вы получите возвращаемое значение. Одна нота, хотя; при использовании этого с SELECT результатами возвращаемое значение доступно только после того, как все данные были прочитаны из результатов (возврат / вывод на конце потока TDS) .

2 голосов
/ 26 июня 2010

Вам необходимо добавить параметр с направлением = ReturnValue:

using (var command = new SqlCommand("dbo.CheckUsername11", conn) 
            { CommandType = CommandType.StoredProcedure })
{
  command.Parameters.Add(new SqlParameter("@result") { ParameterDirection.ReturnValue });
  command.Parameters.AddWithValue("@Username", username);

  command.ExecuteNonQuery();

  return (int)command.Parameters["@result"].Value;
}
0 голосов
/ 26 июня 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...