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

Posted

技术标签:

【中文标题】存储过程输出参数返回舍入值【英文标题】: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#代码贴出来吗? 【参考方案1】:

你需要将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 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 参数的变量的类型。

【讨论】:

我使用十进制设置为外参数。我也尝试过双重但同样的问题仍然存在

以上是关于存储过程输出参数返回舍入值的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 存储过程:返回结果集和输出参数

如何在Spring中调用存储过程来读取返回值和输出参数?

C#获取存储过程返回值和输出参数值的方法

存储过程 varchar 输出参数

存储过程: 查询返回输出参数

在 C# 中使用存储过程输出参数