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)
Irgendwelche Ideen, wie man damit umgeht, ohne Null zu übergeben (die Null beizubehalten)?
Erweiterungsmethode:
%Vor% oder, um SetSqlInt32
zu verwenden, wie von D Stanley vorgeschlagen:
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.
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.
Tags und Links c# sql-server-2008 sqldatatypes