存储过程输出参数返回舍入值
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 参数的变量的类型。
【讨论】:
我使用十进制设置为外参数。我也尝试过双重但同样的问题仍然存在以上是关于存储过程输出参数返回舍入值的主要内容,如果未能解决你的问题,请参考以下文章