Ist DBNull.Value erforderlich für Nullable-Typen als SqlCommandParameter.Value
Frage
Welcher Ansatz empfohlen:
void Add(int? value)
{
command.Parameters.Add("@foo").Value = value;
}
oder
void Add(int? value)
{
command.Parameters.Add("@foo").Value = (object)value ?? DBNull.Value;
}
Lösung
Wenn Sie einen Nullwert in einem Parameter übergeben möchten, müssen Sie DBNull.Value
wie in Ihrem zweiten Beispiel passieren.
Wenn Sie assign null
als Parameterwert, wird der Parameter nicht auf das Verfahren gesendet werden, die das Verfahren Anruf wird entweder nicht (wenn der Parameter erforderlich ist) oder den Standardwert für den Parameter verwenden, die gegebenen kann nicht null sein.
Andere Tipps
Es hängt von der Funktionalität, die Sie wollen.
Wenn Sie null
als Wert übergeben, dann wird der SqlCommand behandelt, dass das gleiche wie wenn die Parameter überhaupt nicht bestanden hatten. Wenn es ein erforderlicher Parameter ist in zum Beispiel dann eine gespeicherte Prozedur, die bewirkt, dass Ihre Abfrage zum Scheitern verurteilt.
Wenn Sie DBNull.Value
dann die SqlCommand passieren behandeln, dass als SQL null übergeben wird.