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

Kri*_*ota 6 c# sql-server stored-procedures output-parameter sql-server-2008

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

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

SELECT查询:

SET @GrandTtl = (SELECT TOP 1 Bill_Amount 
                 FROM Tbl_Restaurant_Kitchen_Order_Bill_Details 
                 WHERE Bill_Number = @billno)
Run Code Online (Sandbox Code Playgroud)

例如,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);
Run Code Online (Sandbox Code Playgroud)

Ric*_*iwi 14

您需要将C#参数设置为

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

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

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

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