0

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

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

3 回答 3

1

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

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

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

  3. ExecuteReader:通过选定的记录向前移动。一个例子

另请查看有关 catch(Exception)的这篇文章。

于 2012-08-24T18:33:40.900 回答
0

您也可以使用ExecuteScalar(整数示例)

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

于 2012-08-24T18:11:31.497 回答
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;
        }
    }
于 2012-08-24T18:44:34.297 回答