Überlauf-Ausnahme beim Lesen von decimal-Werten aus SQL Server

Frage ich mich, ob das ein bug ist oder falls ich etwas falsch.

Bin ich be-Werte mit einem SqlDataReader aus einer SQL Server 2008 Datenbank, aber unter Umständen nicht konvertiert die SQL-Werte in .Netto-Werte. (.NET 4.0)

Habe ich verfolgt Sie auf einem test-Fall, der zeigt das eigentliche problem:

Beispiel:

"select convert(decimal(38, 19), 260000 ) as test"
rs.GetValue(1);
--> returns 260000 (decimal)

Nicht funktioniert Beispiel:

"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)

Habe ich geprüft, die eigentlichen Werte, die SQL Server retured. Sie unterscheiden sich darin, dass die nicht arbeiten verwendet man 4 ganze zahlen Ausdrücken den Wert, den man nur 3.

Habe ich auch den Quellcode mit .net Reflector die enthüllt, dass eine Ausnahme geworfen wird wenn der Wert vorhanden ist, der mehr als 3 Werte, aber ich verstehe nicht die mechanik hinter Ihnen.

So, ich Frage mich, ob das ein echter bug in der .net framework.

InformationsquelleAutor Chuck | 2012-07-04
Schreibe einen Kommentar