Überlaufausnahme beim Lesen von Dezimalwerten von SQL Server

8

Ich frage mich, ob das ein Fehler ist oder ob ich etwas falsch mache.

Ich lade Werte mit SqlDataReader aus einer SQL Server 2008-Datenbank, aber unter bestimmten Umständen können die SQL-Werte nicht in .net-Werte konvertiert werden. (.NET 4.0)

Ich habe es zu einem Testfall zurückverfolgt, der das eigentliche Problem zeigt:

Arbeitsbeispiel:

%Vor%

Nicht funktionierendes Beispiel:

%Vor%

Ich habe die tatsächlichen Werte untersucht, die der SQL Server zurückgeworfen hat. Sie unterscheiden sich dadurch, dass das nicht arbeitende Programm 4 Ganzzahlen verwendet, um den Wert auszudrücken, das Arbeitsfeld nur 3.

Ich habe auch den Quellcode mit .net Reflector überprüft, der enthüllt hat, dass eine Ausnahme ausgelöst wird, wenn der Wert aus mehr als drei Werten besteht, aber ich verstehe die Mechanik dahinter nicht.

Also, ich frage mich, ob das ein echter Fehler im .net-Framework ist.

    
Chuck 04.07.2012, 09:30
quelle

1 Antwort

6

Es ist nicht etwas, was Sie falsch machen, abgesehen davon, dass Sie vielleicht zu genau sind. Ich glaube nicht, dass es ein neues Problem entweder .

Man könnte argumentieren, dass es sich um einen Fehler oder nur um eine Lücke in der Funktionalität handelt. Die Struktur .Net Decimal kann den Wert, der in Ihrem SQL Server decimal gespeichert ist, nicht darstellen, sodass ein OverflowException ausgelöst wird.

Entweder müssen Sie den Wert zu einem in der Datenbank kompatiblen Element ändern, bevor Sie ihn abrufen, oder Sie lesen die Daten in einem rohen Binär- oder String-Format aus und bearbeiten sie auf der .Net-Seite.

Alternativ könnten Sie einen neuen Typ schreiben, der es handhabt.

Es ist wahrscheinlich einfacher, nur eine kompatible decimal -Definition zu verwenden, es sei denn, Sie benötigen diese Genauigkeit wirklich. Wenn Sie das tun, würde mich interessieren, warum.

    
Jodrell 04.07.2012, 10:39
quelle

Tags und Links