有以下存储过程:
Create procedure sp_sales
asDeclare  @TransName varchar(50),
              @Reason varchar(50)if not exists(select HeadID from table1)
begin 
set 
set @Reason='没有销售分项不能过帐'
Select '1'  as  result,  @Reason as Reason
Return 1
endSet @TransName = 'SalesTransferAccount'
begin Transaction @TransName-- 更改客户的应收金额,总发票金额,发票金额
update erpCustomer set ARAmount=ARAmount+100
Begin
Set @Reason = '更新客户出错,请重新操作'
Goto Failcase
End-- 更改订单的状态 9-->完成
update erpSale set status=9 where ID=@id
Begin
Set @Reason = '更新订单状态时出错,请重新操作'
Goto Failcase
EndCommit Transaction @TransName
Set @Reason = '' 
Select   '0'  as  result ,  @Reason as Reason
Return 0Failcase:
Rollback Transaction @TransName
Select '1'  as  result,  @Reason as Reason
Return 1在C#中如何获取存储过程的返回值,并且当返回值为1时输出@Reason中的信息?请大家帮忙看看,谢谢 

解决方案 »

  1.   

    对象SqlCommand的参数类型分为: input/output/returnvalue 三种类型.设置其一个参数为: 返回值 类型即可.
      

  2.   

    如果是多列或者多行,使用ExecuteReader()。如果最多仅仅有一个值,使用ExecuteScalar()。
      

  3.   

    你的那个“存储过程”,通过ExecuteReader就可以采集到 result 和 Reason 了,不用去管 return 的那个整数。
      

  4.   

    用不着参数,你这个存储过程是返回一个结果集的SqlDataReader dr = cmd.ExecuteReader();
    int result;
    string reason;
    if(dr.Read())
    {
    result=dr.GetInt32(0);
    reason = dr.GetString(1);
    }
    dr.Close();
    if(result==1)
    {
    //显示reason就可以了
    }
      

  5.   

    在C#中如何获取存储过程的返回值?
    ...SqlParameter rtnVal=cmd.Parameters.Add("rval",SqlDbType.Int);
    rtnVal.Direction=ParameterDirection.ReturnValue;
    SqlDataReader reader=cmd.ExecuteReader();
    m_info.Text =rtnVal.Value.ToString();运行时系统提示:异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。请问是怎么回事?该如何做?
      

  6.   

    rtnVal.Value是null值,所以不能ToString()