これはバグかどうか、私は何か間違っていると思っています。SQL Serverから10進値を読み取るときのオーバーフロー例外
SQL Server 2008データベースからSqlDataReader
という値をロードしていますが、特定の状況でSQL値を.net値に変換できません。 (.NET 4.0)
:
の作業例:
"select convert(decimal(38, 19), 260000) as test"
rs.GetValue(1);
--> returns 260000 (decimal)
に動作していないexmaple:
"select convert(decimal(36, 26), 260000) as test"
rs.GetValue(1);
--> throws
System.OverflowException: Conversion overflows.
at System.Data.SqlClient.SqlBuffer.get_Decimal()
at System.Data.SqlClient.SqlBuffer.get_Value()
at System.Data.SqlClient.SqlDataReader.GetValueInternal(Int32 i)
at System.Data.SqlClient.SqlDataReader.GetValues(Object[] values)
を私は、SQL Serverが撤回した実際の値を調べました。彼らは、非稼働のものが値を表現するために4つの整数を使用するという点が異なります。
さらに、値が存在すれば例外がスローされることを発表した.net Reflectorもソースコードをチェックしました。その後3つの値が、私はそれらの背後にある力学を理解していない。
これは、.NETフレームワークの本物のバグかどうか疑問に思っています。
小数点精度の精度は28までです。リンクhttp://stackoverflow.com/questions/745270/c-sharp-sizeof-decimal – praveen
でも、実際の例でも精度は高くなっています。 – Chuck