2012-06-19 5 views
6

Ich habe eine C# -Frage. Ich wollte nur die Community über die Verwendung von System.DBNull in Verbindung mit einem DataReader fragen.DBNull auswerten: auf Gleichheit prüfen oder den Operator 'is' verwenden?

Wenn Sie eine Datenbank abfragen und nach Nullwerten suchen, was ist besser geeignet/bevorzugt?

Mit dem 'is' Betreiber:

reader["fieldname"] is DBNull 

oder einfach nur den Wert überprüft:

reader["fieldname"] == DBNull.Value 

Beide scheinen zu arbeiten. Ich wollte nur ein paar andere Meinungen bekommen.

+4

Warum nicht [reader.IsDBNull] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.isdbnull.aspx) verwenden? –

+0

reader.IsDBNull() benötigt einen ganzzahligen Parameter. Ich würde lieber String-Parameter verwenden. – MothraTL

+0

Sie können: 'reader.IsDbNull (reader.GetOrdinal (" fieldname "))' –

Antwort

7

Vorausgesetzt, dass DBNull.Value der einzige Nicht-Null-Wert für die Klasse DBNull ist, sind die beiden effektiv gleichwertig. Was findest du besser lesbar? Persönlich mag ich die erste Version, aber Ihre Laufleistung kann variieren.

Es ist wahrscheinlich kein Problem in Bezug auf die Leistung, egal wie.

4

Sie können auch auf diese Weise prüfen:

Convert.IsDBNull(reader["field name"]); 
+1

Aus Gründen der Diskussion ist dies, was Convent.IsDBNUll hinter den Kulissen tut: public static bool IsDBNull (Objektwert) { \t wenn (value == DBNull.Value) \t { \t \t return true; \t} \t IConvertible Convertible = Wert als IConvertible; \t Rückgabe konvertierbar! = Null && convertible.GetTypeCode() == TypeCode.DBNull; } – MothraTL

2

denke ich, Microsoft empfiehlt im Allgemeinen Convert.IsDBNull verwenden, da sie Sie wollen neigen dazu, für die meisten Umwandlung und Äquivalenzprüfung konvertieren verwenden.

Von http://msdn.microsoft.com/en-us/library/system.dbnull.aspx:

Sie können bestimmen, ob ein Wert aus einem Datenbankfeld abgerufen ist ein DBNull Wert durch den Wert dieses Feldes an die DBNull.Value.Equals Methode übergeben. Einige Sprachen und Datenbankobjekte stellen jedoch Methoden bereit, mit denen einfacher festgestellt werden kann, ob der Wert eines Datenbankfelds DBNull.Value ist. Dazu gehören die Visual Basic IsDBNull-Funktion, die Convert.IsDBNull-Methode, die DataTableReader.IsDBNull-Methode und die IDataRecord.IsDBNull-Methode.

Verwandte Themen