Как запустить хранимую процедуру (с параметрами - имеет возвращаемое значение) из кода позади? - PullRequest
2 голосов
/ 20 декабря 2010

Как я могу использовать хранимую процедуру (с параметрами - имеет возвращаемое значение типа int) из кода позади?

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

ALTER Procedure [dbo].[sp_Noskheh_SumOfTotalPay]
    @Co_ID int
AS
-----------------
Declare @Sum bigint
-----------------
BEGIN
    SELECT
       @Sum = SUM(TotalPay)
    FROM Noskheh
    WHERE
       (Co_ID = @Co_ID)

    RETURN @Sum
END

Я хочу использовать @Sum в коде позади ...

Не могли бы вы показать мне способ сделать это?

Заранее спасибо

С наилучшими пожеланиями

Ответы [ 3 ]

2 голосов
/ 20 декабря 2010
2 голосов
/ 20 декабря 2010

Вам необходимо установить SqlConnection и SqlCommand.Если у вас есть код с оператором RETURN @Sum в конце, вам нужно сделать это (определите параметр типа RETURN_VALUE):

using(SqlConnection _conn = new SqlConnection(-your-connection-string-here))
using(SqlCommand _cmd = new SqlCommand("dbo.sp_Noskheh_SumOfTotalPay", _conn))
{  
   _cmd.CommandType = CommandType.StoredProcedure;

   _cmd.Parameters.Add(new SqlParameter("@CO_ID", SqlDbType.Int));
   _cmd.Parameters["@CO_ID"].Value = 5; // whatever value you want

   _cmd.Parameters.Add(new SqlParameter("@RETURN_VALUE", SqlDbType.BigInt));
   _cmd.Parameters["@RETURN_VALUE"].Direction = ParameterDirection.ReturnValue; 

   _conn.Open();
   _cmd.ExecuteNonQuery();

   Int64 result = Int64.Parse(_cmd.Parameters["@RETURN_VALUE"].Value);

   _conn.Close();
}

Было бы намного проще, если бы вы заменили этот RETURNоператор с простым SELECT:

SELECT @Sum

В этом случае вы можете использовать упрощенную версию, которая была у меня ранее - с помощью .ExecuteScalar(), чтобы извлечь единственное значение одной строки, возвращаемой из сохраненного процесса:

using(SqlConnection _conn = new SqlConnection(-your-connection-string-here))
using(SqlCommand _cmd = new SqlCommand("dbo.sp_Noskheh_SumOfTotalPay", _conn))
{  
   _cmd.CommandType = CommandType.StoredProcedure;

   _cmd.Parameters.Add(new SqlParameter("@CO_ID", SqlDbType.Int));
   _cmd.Parameters["@CO_ID"].Value = 5; // whatever value you want

   _conn.Open();
   object result = _cmd.ExecuteScalar();
   _conn.Close();

   Int64 sum = Int64.Parse(result);
}

Это должно вызвать ваш сохраненный процесс, прочитать одно возвращаемое значение и преобразовать его в int переменную с именем sum.

0 голосов
/ 20 декабря 2010

Вы можете добавить SqlParameter @Sum с направлением, установленным на ReturnValue

Пример:

SqlCommand cmd = new SqlCommand():

cmd.Connection = // place your SqlConnection object;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "StoreProcedureName";

cmd.Parameters.Add("@Sum", SqlDbType.BigInt).Direction = ParameterDirection.ReturnValue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...