我试图调用存储过程发送一个名为rate
的小数作为其参数之一,但在执行查询时它会丢失小数精度。
这是服务器端的代码:
IQuery query = Session.CreateSQLQuery("exec SaveExchangeRate @Rate = :rate, @OtherParameter = :otherParameter");
query.SetDecimal("rate", exchangeRate.Rate);
query.SetInt32("otherParamter", otherParamter);
query.ExecuteUpdate();
此时,exchangeRate.Rate
为0.0000631046
。
当我打开SQL分析器时,正在给我:
exec sp_executesql N'exec SaveExchangeRate @Rate = @p0, @OtherParamter = @p1',N'@p0 decimal(28,5),@p1 int',@p0=6,@p1=4
如您所见,精度为decimal(28,5)
,但在存储过程中,所需的精度为decimal(19,10)
,发送到SQL数据库的数量仅为6
,失去了精确。之后,持续的数字为0.0000600000
,会丢失很多小数。
我该如何解决这个问题?
答案 0 :(得分:2)
这根本不是直截了当的,可能有更好的方法,但您可以使用TypeFactory
检索具有所需比例和精度的decimal
类型,然后使用{ {1}}代替SetParameter
:
SetDecimal
这似乎将正确的号码发送到数据库。