Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Was ist der beste Weg, um mit DBNull umzugehen

Nullable-Typen sind gut, aber nur für Typen, die von vornherein nicht nullable sind.

Um einen Typ „nullable“ zu machen, hängen Sie ein Fragezeichen an den Typ an, zum Beispiel:

int? value = 5;

Ich würde auch empfehlen, die Datei "as " anstelle von Casting. Sie können das Schlüsselwort "as" nur für nullable-Typen verwenden, stellen Sie also sicher, dass Sie Dinge umwandeln, die bereits nullable sind (wie Strings) oder verwenden Sie nullable-Typen wie oben erwähnt. Der Grund dafür ist

  1. Wenn ein Typ nullable ist, wird die Datei "as " Schlüsselwort gibt null zurück wenn ein Wert DBNull ist .
  2. Es ist ein bisschen schneller als das Casten, allerdings nur in bestimmten Fällen. Dies allein ist nie ein ausreichender Grund, as zu verwenden , aber in Verbindung mit dem obigen Grund ist es nützlich.

Ich würde empfehlen, so etwas zu tun

DataRow row = ds.Tables[0].Rows[0];
string value = row as string;

Im obigen Fall, wenn row kommt als DBNull zurück , dann value wird zu null anstatt eine Ausnahme auszulösen. Beachten Sie, dass, wenn Ihre DB-Abfrage die zurückgegebenen Spalten/Typen ändert, mit as führt dazu, dass Ihr Code stillschweigend fehlschlägt und Werte einfach machen null Anstatt die entsprechende Ausnahme auszulösen, wenn falsche Daten zurückgegeben werden, wird empfohlen, dass Sie Tests durchführen, um Ihre Abfragen auf andere Weise zu validieren, um die Datenintegrität sicherzustellen, wenn sich Ihre Codebasis weiterentwickelt.