我需要使用高精度的十進制值 - 例如SQL Server 2012 allows for up to 38 digits。.NET,SQL Server,NHibernate和高精度小數點
這比System.Decimal
支持的更精確(28-29 significant digits)。
讓我們假設我使用BigDecimal
的特定實現來表示支持任何所需構造函數的CLR方面(例如從數字的字符串表示形式)。
這些值使用相應的SQL Server decimal
類型存儲在SQL Server數據庫中。
我使用NHibernate for ORM。我正在嘗試創建一個IUserType
實現,該實現將數據庫表示轉換爲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層 - 它也沒有適合m用例的defined DbType
,據我所知。
我無法得到這個工作。 getValue()試圖返回一個引發溢出異常的小數,它不是一個SQLDataReader,所以我不能調用.getSqlDecimal()。有什麼想法嗎? – Stu
@Stu您是否正在使用Oracle,並且應該以更高的精度使用它們的類型? –
我正在使用SQL Server。我得到的IDataReader是一個NHybridDataReader。 – Stu