Objekt kann nicht von DBNull in andere Typen umgewandelt werden. Fehler, wenn ein Nullwert vom Reader gelesen wird

8
%Vor%

Ich lese topID aus der Tabelle, wenn TopID null ist. Ich möchte topID als 0 lassen, aber da es null ist, wirft es einen Fehler, wie kann ich diesen Fehler behandeln, wenn Das topID ist null

    
Mark 03.11.2011, 16:40
quelle

8 Antworten

6

Ändern Sie Ihren Lesecode in:

%Vor%     
marc_s 03.11.2011, 16:43
quelle
4

Rufen Sie IsDBNull() im Reader auf, um die Spalte zu überprüfen, bevor Sie versuchen, sie zu konvertieren:

%Vor%

Oder vergleichen Sie mit DBNull.Value :

%Vor%     
James Michael Hare 03.11.2011 16:42
quelle
1

Verwenden Sie den Test:

%Vor%     
Olivier Jacot-Descombes 03.11.2011 16:47
quelle
1

Das Problem ist, dass Sie versuchen, int mit einer Null zu setzen, nicht im Lesen. Sie können dies tun, um einen alternativen Wert festzulegen, wenn der Wert, den Sie eingeben möchten, null ist:

%Vor%

Eine andere Alternative ist, dass Sie nullable Ganzzahlen verwenden können, indem Sie topID wie folgt initialisieren:

%Vor%

aber dies erfordert immer noch, woanders auf Null zu prüfen, zusammen mit einigen anderen Dingen, die zu behandeln sind, deshalb würde ich empfehlen, das doppelte Fragezeichen auf Ihrem Wertsatz zu verwenden, wie ich zuerst gezeigt habe.

    
Nikkoli 03.11.2011 16:49
quelle
0

Sie müssen überprüfen, ob der Wert DBNull ist, bevor Sie versuchen, ihn abzurufen. Außerdem empfehle ich die Verwendung von GetInt32() über Convert.ToInt32() , da angegeben wurde, dass sich die interne Optimierung von GetInt32() ändern kann, wo sie schneller ist als die Verwendung von Convert.ToInt32() . Ich habe das schon vor langer Zeit gelernt und habe keinen Referenzartikel, den du dir ansehen kannst. Zu der Zeit, als ich erfuhr, dass GetInt32() intern Convert.ToInt32()

verwendete %Vor%     
Charles Lambert 03.11.2011 16:54
quelle
0

Ich möchte DataTable anstelle von DataReader verwenden. Ich hasse repetitive Boilerplate, also fügte ich der Klasse DataRow einige Erweiterungsmethoden hinzu, um die Downcast-Logik einzukapseln und für einen besser lesbaren Code zu sorgen:

%Vor%

Hier der Code für den Downcasting eines Spaltenwertes von einem DataRow zu einem int / int? :

%Vor%

Ich halte es für ziemlich einfach, ähnliche Erweiterungsmethoden von einem DataReader zu entfernen.

    
Nicholas Carey 03.11.2011 17:24
quelle
0

Hier ist der Code, in dem wir jede ID aus der MS Access-Datenbank beim Laden der Seite eines Registrierungsformulars automatisch generieren

%Vor%     
user3541260 16.04.2014 12:47
quelle
0

Verwenden Sie eine generische Erweiterungsmethode für Ihren Reader (siehe auch SO Frage )

%Vor%

Implementieren Sie diese Erweiterungsmethode für Ihre Leserklasse (MySql, Sql, Oracle, etc.)

%Vor%     
BeyondTheSea 03.09.2016 10:11
quelle

Tags und Links