如何从存储过程中获取返回值?

时间:2011-07-12 14:40:40

标签: c# asp.net sql-server return-value

这是我的SQL:

IF (SELECT Status FROM dbo.Coupon WHERE Guid = @pGuid) = 0
BEGIN
    UPDATE
        dbo.Coupon

    SET
        Status = @pStatus   

    WHERE
        Guid = @pGuid

    RETURN 0    
END

ELSE

RETURN 1;

这是我的C#:

try
            {
                DbCommand command = db.GetStoredProcCommand("upd_Coupon_p");
                db.AddInParameter(command, "@pGuid", DbType.String, s);
                db.AddInParameter(command, "@pStatus", DbType.Byte, 1);
                ds = db.ExecuteDataSet(command);
             }

如何在代码中获得0或1的返回值?

4 个答案:

答案 0 :(得分:5)

您可以添加返回值参数,如下所示:

对于SqlCommand:

parameters.Add("@retValue", DbType.Int32, ParameterDirection.ReturnValue);   

对于EL,您需要使用db.AddParameter()并指定ParameterDirection.ReturnValue。

此外,只要数据库中的行计数已启用,对于您正在执行的更新,您可以使用ExecuteNonQuery()中的结果来告诉您在更新/插入/删除/等上受影响的行数。这样你可以处理受影响的行是0(找不到任何)

答案 1 :(得分:0)

这就是我所做的,所以基本上只使用ReturnValue,但其他部分可能会有用。

            var retparam = new SqlParameter("@return", System.Data.SqlDbType.Int) { Direction = System.Data.ParameterDirection.ReturnValue };
            comm.Parameters.Add(retparam);
            comm.ExecuteNonQuery();
            int ret = 0;
            if (retparam == null)
            {
                System.Diagnostics.Debug.WriteLine("retparam was null");
            }
            else if (retparam.Value == null)
            {
            }
            else
            {
               // use reparam.Value.ToString()
            }

答案 2 :(得分:-1)

什么是DbCommand.ExecuteDataSet()以及为什么不使用ExecuteScalar()?

答案 3 :(得分:-1)

将变量声明为输出,并将其置于数据访问部分的调用函数中。

请参阅下面的代码,

在存储过程中,

  @ReturnStatus int output //inside your stored procedure argument section

在“数据访问”部分中,使用以下内容

   AddOutParameter(.....);

希望这会有所帮助..