繁体   English   中英

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

[英]What is the correct and optimal way to get the return value of an executed stored procedure?

这就是我所拥有的,我只是想知道这是否是执行此操作的正确方法,如果不是,那将是最佳选择。

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;
    }
}

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

  1. ExecuteNonQuery:如果只需要受影响的行数。 AFAIK,如果您没有在SP中使用Set NoCount on ,它就可以工作。 当然,出于性能目的,请继续这样做。 不过,您可以像使用@Return_Value一样获取整数值。 一个例子

  2. ExecuteScalar:如果要在SQL中仅选择任何受支持类型的值。 一个例子

  3. ExecuteReader:在选定的记录中前进。 一个例子

还可以看看这篇关于catch(Exception)的文章。

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

var结果=(Int32)cmd.ExecuteScalar();

您可以尝试一下:

    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;
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM