gpt4 book ai didi

.NET、SQL Server、NHibernate 和高精度小数

转载 作者:行者123 更新时间:2023-12-01 05:25:03 25 4
gpt4 key购买 nike

我需要使用高精度的十进制值 - 例如,SQL Server 2012 allows for up to 38 digits .

这比System.Decimal更精确支持 ( 28-29 significant digits )。

假设我使用了 BigDecimal 的某个实现在支持任何需要的构造函数的 CLR 端表示它(例如,从数字的字符串表示)。

这些值使用适当的 SQL Server decimal 存储在 SQL Server 数据库中。类型。

我正在将 NHibernate 用于 ORM。我正在尝试创建一个 IUserType 从 DB 表示转换为 BigDecimal 的实现表示。

我的问题是,如果不使用中间件 System.Decimal,我无法弄清楚如何做到这一点。这将截断数据。

public virtual object NullSafeGet(IDataReader rs, string[] names, object owner)
{
// ??
object objValue = NHibernateUtil.Decimal.NullSafeGet(rs, names[0]);
//objValue is already a System.Decimal

if (!Convert.IsDBNull(objValue))
{
return new BigDecimal(objValue.ToString());
}
return null;
}

更新:

在 Java 版本中,我可以看到一个特殊的 Hibernate DbType 用于这个确切的用例: org.hibernate.type.BigDecimalType

我开始怀疑这是否是底层 ADO.NET 层的限制 - 它也没有 defined DbType 据我所知,适用于 m 用例。

最佳答案

无需调用 NHibernateUtil.Decimal.NullSafeGet()。相反,您应该使用 IDataReader 上可用的方法来获取值。

如果您使用例如GetValue() 在阅读器上,由 type mapping table看起来你会得到一个 System.Data.SqlTypes.SqlDecimal 的实例.

然后您必须弄清楚如何将值转换为您的 BigDecimal。

关于.NET、SQL Server、NHibernate 和高精度小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14402211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com