Wie behandeln Sie Nullable Typ mit SqlDataRecord

8

Ich analysiere XML (LINQ to XML) und verwende einen NULL-fähigen Typ ( int? und decimal? ) in Fällen, in denen das Element / Attribut leer ist. Beim Erstellen meiner Sammlung zum Übergeben an die Datenbank (unter Verwendung von TVP) weiß ich jedoch nicht, wie die Fälle behandelt werden sollen, in denen der Wert tatsächlich null ist. Ich kann keinen NULL in SqlDataRecord SetInt32 oder SetDecimal übergeben und ich möchte nicht auf Null setzen .... Ich möchte eigentlich, dass es null ist.

Erzähl mir keine Überladung für int ?

Die Anzahl darunter ist ein Nullwerttyp ( int? Count)

%Vor%

Irgendwelche Ideen, wie man damit umgeht, ohne Null zu übergeben (die Null beizubehalten)?

    
scarpacci 06.12.2011, 19:03
quelle

4 Antworten

10

Erweiterungsmethode:

%Vor%

oder, um SetSqlInt32 zu verwenden, wie von D Stanley vorgeschlagen:

%Vor%

Hinweis, 9. Dezember 2013: Zurück zu dieser Antwort aufgrund eines Kommentars, bemerkte ich eine kleine Chance für Verbesserungen, basierend auf Eric Lipperts Serie über Nullable-Mikrooptimierungen, die unter Ссылка .

Kurz gesagt, während die Eigenschaft Value weniger Tipparbeit benötigt und daher für den Programmierer wahrscheinlich optimaler ist, muss sie eine Ausnahme auslösen, wenn HasValue falsch ist. Auf der anderen Seite ist die Methode GetValueOrDefault() ein einfacher Feldzugriff. Aus diesem Grund benötigt GetValueOrDefault() weniger Anweisungen und ist eher inline, so dass es für den Compiler und den Prozessor optimal ist.

    
phoog 06.12.2011, 19:16
quelle
3

Ich habe noch nie mit SqlDataRecord gearbeitet, aber bei Verwendung von DataTable und DataRow oder bei Verwendung von parametrisierten Abfragen gebe ich null mit DBNull.Value .

Mit SqlDataRecord sieht es so aus, als könnten Sie die SetDBNull Methode.

    
Jeff Ogata 06.12.2011 19:08
quelle
0

Sollte SetSqlInt32 anstelle von SetString verwenden. Probieren Sie

aus %Vor%     
D Stanley 06.12.2011 19:13
quelle
0

// Ich habe festgestellt, dass dies am besten funktioniert, wenn ich NULL-fähige Typen überprüfe oder mich mit ihnen behebe   // In meinem Beispiel überprüfe ich Werte, die in einem String [] Array gespeichert sind

%Vor%     
MethodMan 06.12.2011 19:45
quelle