これがバグなのか、何か問題があるのか疑問に思います。
SQL Server 2008データベースから値を読み込んでいSqlDataReader
ますが、特定の状況下では、SQL値を.net値に変換できません。(.NET 4.0)
私はそれを実際の問題を実証するテストケースまでたどりました:
実例:
"select convert(decimal(38, 19), 260000 ) as test"
rs.GetValue(1);
--> returns 260000 (decimal)
動作しない例:
"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)
SQLServerが取得した実際の値を調べました。それらは、機能していないものが値を表すために4つの整数を使用し、機能しているものは3つだけを使用することとは異なります。
また、.net Reflectorを使用してソースコードを確認しました。これにより、値が3つを超える値が存在する場合に例外がスローされることが明らかになりましたが、その背後にあるメカニズムがわかりません。
ですから、これが.netFrameworkの真のバグであるかどうか疑問に思っています。