如何运行存储过程(带参数 - 具有返回值)从代码背后?

时间:2010-12-20 18:15:01

标签: c# asp.net sql-server-2008 stored-procedures

如何从后面的代码中使用存储过程(带参数 - 返回值类型为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 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

您需要设置SqlConnectionSqlCommand。如果您的代码最后包含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();
}

如果用一个简单的SELECT替换RETURN语句会更容易:

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的{​​{1}}变量。

答案 2 :(得分:0)

您可以添加方向设置为@Sum

的SqlParameter 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