SQL Query上的NHibernate十进制精度

时间:2014-12-19 15:41:35

标签: c# sql-server stored-procedures nhibernate

我试图调用存储过程发送一个名为rate的小数作为其参数之一,但在执行查询时它会丢失小数精度。

这是服务器端的代码:

IQuery query = Session.CreateSQLQuery("exec SaveExchangeRate @Rate = :rate, @OtherParameter = :otherParameter");
query.SetDecimal("rate", exchangeRate.Rate);
query.SetInt32("otherParamter", otherParamter);
query.ExecuteUpdate();

此时,exchangeRate.Rate0.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,会丢失很多小数。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

这根本不是直截了当的,可能有更好的方法,但您可以使用TypeFactory检索具有所需比例和精度的decimal类型,然后使用{ {1}}代替SetParameter

SetDecimal

这似乎将正确的号码发送到数据库。