2011-07-12 118 views
4

这里是我的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的返回值?

+0

如何从我的存储过程获取返回值? – SkyDawg33

+0

是db一个自定义数据库类的实例吗?等一下!你正在使用EL! –

回答

5

您添加一个返回值参数,就像这样:

对于SqlCommand的:

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

对于EL,你想使用db.AddParameter(),并指定ParameterDirection.ReturnValue。另外,只要数据库中的行数已打开,对于正在执行的更新,您可以使用ExecuteNonQuery()的结果,告诉您在update/insert/delete/etc中有多少行受到影响。这样你可以处理,如果受影响的行是0(找不到任何)

+0

答案在这里充实了一点:http://stackoverflow.com/questions/520735/can-you-use-cmd-executescalar-when-the-sproc-uses-return-value –

-1

什么是DbCommand.ExecuteDataSet()和为什么你不使用ExecuteScalar()?

-1

声明一个变量作为输出并将其存入数据访问部分的调用函数中。

看到下面的代码,

在存储过程中,

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

在Data Access部分使用以下,

AddOutParameter(.....); 

希望这有助于..

+0

有没有必要添加一个输出参数,如果你感兴趣的是返回值 - 这是可访问的详细情况在其他答案中使用returnValue枚举。无可否认,你提出的建议没有问题,只是有点不必要。 –

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() 
      }