CSharp - C# 存储过程输出参数返回舍入值

  显示原文与译文双语对照的内容

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

存储过程中的声明为: @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);



时间: 原作者:

你需要将 C# 参数设置为

  • 输出--显然你已经完成了
  • 十进制类型,具有正确/兼容的比例
  • 
    SqlParameter parm = new SqlParameter("@GrandTtl", SqlDbType.Decimal); 
    
    
    parm.Precision = 19;
    
    
    parm.Scale = 3;
    
    
    parm.Direction = ParameterDirection.Output; 
    
    
    cmd.Parameters.Add(parm);
    
    
    
    

如果未设置比例,则默认值为 0. 参考:SqlParameter.Scale 属性

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

原作者:

根据 ,decimal(p,s) 应该为你工作。 货币和smallmoneyt类型只是十进制的一个子集,精度为 4位。 所以我认为你的问题来自于 C# 中绑定到输出参数的变量的类型。

...