使用带有输出参数的 LINQ 和存储过程丢失小数精度和比例
Posted
技术标签:
【中文标题】使用带有输出参数的 LINQ 和存储过程丢失小数精度和比例【英文标题】:Lost decimal precision and scale using LINQ and stored procedure with output parameters 【发布时间】:2009-01-06 19:45:46 【问题描述】:我有一个使用如下输出参数的存储过程:
ALTER PROCEDURE [GetAmount]
(
@orderID [int],
@totalcost decimal(18,2) OUTPUT
)
SELECT @totalcost = cost
FROM mytable
WHERE orderID = @orderID
当我将存储过程拖到设计器上时,designer.cs 文件中生成的代码最终会丢失精度和比例,如下所示:
[Parameter(DbType="Decimal")] ref System.Nullable<decimal> totalcost
这是一个问题,因为产品价格和订单总数等数据正在四舍五入(即 19.95 变为 20)。
现在,我可以手动更正 .cs 文件,但我必须记住每次进行更新时都要这样做。难道我做错了什么?有没有办法改变我的存储过程,使 LINQ 能够自动检测精度和规模?
【问题讨论】:
【参考方案1】:我可以手动更正 .cs 文件,但是
对,您需要将此代码移动到一个部分类文件中,在那里编辑映射的精度,然后从设计器中删除存储过程。
这为您提供了映射到存储过程的代码的手动规范。
【讨论】:
【参考方案2】:你可以使用money类型而不是decial(18,2)类型吗?
【讨论】:
我真的不知道为什么十进制不能正常工作。我应该多玩一些。对不起。以上是关于使用带有输出参数的 LINQ 和存储过程丢失小数精度和比例的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python 和 Cx_Oracle 调用带有 XMLTYPE 输入和输出参数的 Oracle 存储过程