Adressieren von Nullable-Werten beim Festlegen von SQL Server-Parametern
Bei der Arbeit mit SqlParameter
-Objekten erfordert der Umgang mit nullbaren Werten sorgfältige Aufmerksamkeit. Das direkte Zuweisen eines Nullwerts zu einem ganzzahligen Parameter (z. B. SqlDbType.Int
) führt häufig zum Fehler „Keine implizite Konvertierung von DBNull nach int“. Dies ist auf Typinkompatibilität zurückzuführen.
Das Problem tritt normalerweise auf, wenn der bedingte Operator (?:
) verwendet wird. Dieser Operator hat Schwierigkeiten, einen konsistenten Rückgabetyp zu bestimmen, wenn es um die Möglichkeit eines int
oder DBNull
.
Lösung: Objektumwandlung einsetzen
Ein effektiver Ansatz besteht darin, den nullbaren Wert in object
umzuwandeln. Dadurch wird die Typmehrdeutigkeit behoben, da object
sowohl int
- als auch DBNull
-Werte aufnehmen kann.
<code class="language-csharp">SqlParameter planIndexParameter = new SqlParameter("@AgeIndex", SqlDbType.Int); planIndexParameter.Value = (object)AgeItem.AgeIndex ?? DBNull.Value;</code>
Lösung: Nutzung des Null-Koaleszenzoperators
Eine andere Lösung nutzt den Nullkoaleszenzoperator (??
). Dieser Operator gibt auf elegante Weise den linken Operanden zurück, wenn dieser nicht null ist. andernfalls wird der rechte Operand zurückgegeben.
<code class="language-csharp">SqlParameter planIndexParameter = new SqlParameter("@AgeIndex", SqlDbType.Int); planIndexParameter.Value = AgeItem.AgeIndex ?? DBNull.Value;</code>
Entscheidend ist, dass, wenn AgeItem.AgeIndex
null ist, planIndexParameter.Value
auf DBNull.Value
gesetzt wird, die SQL Server-Darstellung eines Nullwerts.
Durch die Implementierung einer dieser Methoden können Sie Nullwerte in Ihren SqlParameter
Objekten zuverlässig verarbeiten und so häufige Fehler vermeiden.
Das obige ist der detaillierte Inhalt vonWie vermeide ich den Fehler „Keine implizite Konvertierung von DBNull in int' beim Umgang mit nullbaren SQL Server-Parametern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!