【问题标题】:Stored procedure output parameter returning rounded value存储过程输出参数返回舍入值
【发布时间】:2012-10-05 05:15:49
【问题描述】:

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

存储过程中的声明是:@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,则输出参数值从SQL Server 到C# 返回为4088

这是调用存储过程的 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#代码贴出来吗?

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


【解决方案1】:

你需要将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 Property

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

【讨论】:

  • 这对我有用,谢谢。但是我们可以将Precision Scale 放在源代码行中吗?像SqlDbType.Decimal,19.3); 这样的东西???
  • 你需要这个版本的 SqlParameter 构造函数:msdn.microsoft.com/en-us/library/5a10hy4y.aspx 只需按照页面上的 C# 示例进行操作
【解决方案2】:

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

【讨论】:

  • 我使用十进制设置为外参数。我也尝试过双重但同样的问题仍然存在
猜你喜欢
  • 1970-01-01
  • 2016-10-30
  • 1970-01-01
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 2015-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多