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 데이터베이스에 저장됩니다.
나는 ORM을 위해 NHibernate를 사용하고 있습니다. DB 표현에서 BigDecimal
표현으로 변환하는 IUserType
구현을 만들려고합니다.
제 문제는 데이터를 자르지 않는 중간 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;
}
업데이트 :
자바 대응에, 나는이 정확한 사용 사례에 대한 특별한 최대 절전 모드 DbType과를 볼 수 있습니다 org.hibernate.type.BigDecimalType
을 나는이 기본의 한계가 궁금 시작 했어 ADO.NET 레이어 - 그것은 내가 말할 수있는 한 m 사용 사례에 적합한 defined DbType
도 없습니다.
작동하지 않습니다. getValue()는 .getSqlDecimal()을 호출 할 수 없으므로 SQLDataReader가 아니며 오버플로 예외를 발생시키는 십진수를 반환하려고합니다. 이견있는 사람? – Stu
@Stu 오라클을 사용하고 있으며 더 정밀도가 높은 유형을 사용해야합니까? –
SQL Server를 사용하고 있습니다. IDataReader는 NHybridDataReader입니다. – Stu