获取已执行存储过程的返回值的正确和最佳方法是什么?

时间:2012-08-24 18:06:07

标签: c# sql return-value

这就是我所拥有的,我只是想知道这是否是正确的方法,如果不是,那将是最佳的。

public static int AddPullSubscription(string connectionString)
{
    try
    {
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            using (SqlCommand cmd = new SqlCommand("", conn))
            {
                cmd.CommandType = CommandType.StoredProcedure;

                var returnParameter = cmd.Parameters.Add("@RETURN_VALUE", SqlDbType.Int);
                returnParameter.Direction = ParameterDirection.ReturnValue;

                cmd.ExecuteNonQuery();

                return Convert.ToInt32(returnParameter.Value);
            }
        }
    }
    catch (Exception)
    {
        throw;
    }
}

3 个答案:

答案 0 :(得分:1)

这取决于您的存储过程的结果。

  1. ExecuteNonQuery:如果只需要受影响的行数。 AFAIK,如果您没有在SP中使用Set NoCount on,它就可以使用。当然,出于性能目的,请继续。您可以使用@Return_Value来获取整数值。 example

  2. ExecuteScalar:如果您要在SQL中仅选择任何受支持类型的值。 example

  3. ExecuteReader:向前移动选定的记录。 example

  4. 另请查看关于catch(例外)的this article

答案 1 :(得分:0)

您也可以使用ExecuteScalar(带整数的样本)

var result =(Int32)cmd.ExecuteScalar();

答案 2 :(得分:0)

你可以尝试一下:

    using (var conn = new SqlConnection(connectionString))
    {
        using (var sqlCmd = new SqlCommand("SEL_StoredProcedure", conn))
        {
                sqlCmd.CommandType = System.Data.CommandType.StoredProcedure;
                //sqlCmd.Parameters.AddWithValue("@ID", Id);
                sqlCmd.Connection.Open();

                return cmd.ExecuteScalar() as Int32;
        }
    }