Verwendung des Datenreaders mit Nullwerten

7

Sagen Sie, ich habe diese Klasse:

%Vor%

Ich versuche, eine generische Liste mit Daten aus einer Datenbank zu füllen. Da GetSqlInt32 INullable implementiert, hätte ich gedacht, dass der unten stehende Code funktionieren würde. Es tut es nicht. Es erzeugt einen Fehler, wenn Field2 null ist.

%Vor%

Irgendwelche Ideen, warum es nicht funktioniert?

    
Anthony 01.09.2009, 13:46
quelle

7 Antworten

24

Es scheint mir, dass Sie eine solche Konvertierung benötigen (mit einer Erweiterungsmethode):

%Vor%

Dann:

%Vor%

(Kommentar zu anderen Antworten: Sie müssen DbNull nicht einfügen, da SqlInt32 bereits Nullwerte darstellen kann. Sie müssen dies nur erkennen, bevor Sie Value verwenden.)

    
Jon Skeet 01.09.2009, 13:51
quelle
6

Sehen Sie sich diese Lösung an, die nicht von mir geschrieben wurde:

%Vor%

Es wurde ursprünglich hier vorgeschlagen:

SQL Data Reader - Umgang mit Null-Spalten

    
Ignacio Soler Garcia 26.08.2011 17:58
quelle
4

Hier ist eine Variation der Schmerzreduktion des Themas. Wenn jemand weiß, wie man Val und Ref in eine Template-Funktion einfügt, ist es frei zu posten. Sie müssen den Typ explizit angeben (C # kompiliert kann nicht belästigt werden) :-) aber dies:

%Vor%

macht meinen Fingern immer noch Freude: -)

%Vor%     
ZXX 22.07.2010 10:35
quelle
1

Ich denke es ist, weil der zurückgegebene Wert DBNull.Value und nicht null ist.

Stattdessen können Sie mithilfe der IsDbNull () -Methode überprüfen, ob das Feld vor dem Lesen null ist.

    
Rune Grimstad 01.09.2009 13:49
quelle
1

Sie müssen eine spezielle Methode für das Lesegerät verwenden, um zu erkennen, wenn der Wert null ist

%Vor%     
Charles Bretana 01.09.2009 13:50
quelle
1
___ qstntxt ___

Sagen Sie, ich habe diese Klasse:

%Vor%

Ich versuche, eine generische Liste mit Daten aus einer Datenbank zu füllen. Da GetSqlInt32 INullable implementiert, hätte ich gedacht, dass der unten stehende Code funktionieren würde. Es tut es nicht. Es erzeugt einen Fehler, wenn Field2 null ist.

%Vor%

Irgendwelche Ideen, warum es nicht funktioniert?

    
___ answer3307902 ___

Hier ist eine Variation der Schmerzreduktion des Themas. Wenn jemand weiß, wie man Val und Ref in eine Template-Funktion einfügt, ist es frei zu posten. Sie müssen den Typ explizit angeben (C # kompiliert kann nicht belästigt werden) :-) aber dies:

%Vor%

macht meinen Fingern immer noch Freude: -)

%Vor%     
___ qstnhdr ___ Verwendung des Datenreaders mit Nullwerten ___ answer7208753 ___

Sehen Sie sich diese Lösung an, die nicht von mir geschrieben wurde:

%Vor%

Es wurde ursprünglich hier vorgeschlagen:

SQL Data Reader - Umgang mit Null-Spalten

    
___ answer1362603 ___

Ich denke es ist, weil der zurückgegebene Wert %code% und nicht %code% ist.

Stattdessen können Sie mithilfe der IsDbNull () -Methode überprüfen, ob das Feld vor dem Lesen null ist.

    
___ antwort4370720 ___

Ich versuche, eine Access-Datenbank mit 39 Feldern zu exportieren - viele mit NULL-Werten. Ich konnte die Erweiterungsmethode nicht funktionieren, also schrieb ich die folgende Funktion:

%Vor%

Wenn ich jedes Feld lese, das einen NULL enthalten könnte, schreibe ich das Feld wie folgt:     ChkDbStr (DbReader.GetValue (1))

    
___ answer1362606 ___

Sie müssen eine spezielle Methode für das Lesegerät verwenden, um zu erkennen, wenn der Wert null ist

%Vor%     
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ answer1362608 ___

Es scheint mir, dass Sie eine solche Konvertierung benötigen (mit einer Erweiterungsmethode):

%Vor%

Dann:

%Vor%

(Kommentar zu anderen Antworten: Sie müssen %code% nicht einfügen, da %code% bereits Nullwerte darstellen kann. Sie müssen dies nur erkennen, bevor Sie %code% verwenden.)

    
___ tag123null ___ Null bedeutet * nichts * oder * unbekannt *, abhängig vom Kontext. ___ tag123datareader ___ Ein DataReader liest einen Nur-Vorwärts-Stream von Zeilen aus einer Datenquelle. ___ answer1362597 ___

DbNull.Value! = null

Du brauchst also entweder ein? : Ausdruck oder ein if-Block zum Konvertieren von Datenbank-Nullen in c # -Nullwerte und umgekehrt.

    
___
TcTom 06.12.2010 20:39
quelle
0

DbNull.Value! = null

Du brauchst also entweder ein? : Ausdruck oder ein if-Block zum Konvertieren von Datenbank-Nullen in c # -Nullwerte und umgekehrt.

    
MatthewMartin 01.09.2009 13:48
quelle

Tags und Links