6

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

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

SELECT查询是:

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

例如,选择查询返回值,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);
4

2 回答 2

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);

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

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

于 2012-10-05T05:26:40.713 回答
0

根据Microsoft decimal(p,s) 应该为您工作。money 和 smallmoneyt 类型只是小数的子集,精度为 4 位。所以我认为你的问题来自绑定到 C# 中的 OUT 参数的变量的类型。

于 2012-10-05T05:25:51.523 回答