存储过程输出参数返回舍入值

时间:2012-10-05 05:15:50

标签: c# sql-server sql-server-2008 stored-procedures output-parameter

我正在使用输出参数从存储过程返回值。

存储过程中的声明是:@GrandTtl DECIMAL(19,3) OUT

SELECT查询是:

SET @GrandTtl = (SELECT TOP 1 Bill_Amount 
                 FROM Tbl_Restaurant_Kitchen_Order_Bill_Details 
                 WHERE Bill_Number = @billno)

例如,select查询返回值4087.67,然后输出参数值从4088从SQL Server返回到C#。

以下是调用存储过程的C#代码:

SqlCommand cmd = new SqlCommand("Sp_RestCC_BillDetails", con);
cmd.CommandType = CommandType.StoredProcedure;

SqlParameter OutParam26 = cmd.Parameters.Add("@GrandTtl", SqlDbType.Decimal,19);

da = new SqlDataAdapter(cmd);

con.Open();
da.Fill(ds, "dtRestCC_Items");
con.Close();

objRCCBEL.GrandTtlOut = Convert.ToDecimal(cmd.Parameters["@GrandTtl"].Value);

2 个答案:

答案 0 :(得分:14)

您需要将C#参数设置为

  1. 输出 - 显然你已经完成了这个
  2. 十进制类型,具有正确/兼容的比例

  3. SqlParameter parm = new SqlParameter("@GrandTtl", SqlDbType.Decimal); 
    parm.Precision = 19;
    parm.Scale = 3;
    parm.Direction = ParameterDirection.Output; 
    cmd.Parameters.Add(parm);
    

    如果您未设置比例,则默认值为0. Ref:SqlParameter.Scale Property

      
        

    解析Value的小数位数。默认值为0.

      

答案 1 :(得分:0)

根据Microsoft十进制(p,s)应该适合你。 money和s​​mallmoneyt类型只是十进制的一个子集,精度为4位。所以我认为你的问题来自于绑定到C#中OUT参数的变量类型。