这是我的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 :(得分: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(.....);
希望这会有所帮助..