我需要使用高精度的十进制值 - 例如,SQL Server 2012最多允许 38 位。
这比System.Decimal
支持的精度更高(28-29 位有效数字)。
假设我BigDecimal
在 CLR 端使用某个实现来表示它,它支持任何需要的构造函数(例如,从数字的字符串表示)。
这些值使用适当的 SQL Serverdecimal
类型存储在 SQL Server 数据库中。
我正在为 ORM 使用 NHibernate。我正在尝试创建一个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 层的限制——据我所知,它也没有定义DbType
适合 m 用例。