2012-06-19 14 views
6

Mam pytanie C#. Po prostu chciałem zapytać społeczność o korzystanie z System.DBNull w połączeniu z korzystaniem z DataReadera.ocena DBNull: sprawdzanie równości lub używanie operatora "jest"?

Podczas wysyłania zapytań do bazy danych i sprawdzania wartości pustych, co jest bardziej odpowiednie/preferowane?

Używanie 'is' Operator:

reader["fieldname"] is DBNull 

lub po prostu sprawdzając wartość:

reader["fieldname"] == DBNull.Value 

Oba wydają się działać. Chciałem tylko uzyskać inne opinie.

+4

Dlaczego nie używać [reader.IsDBNull] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.isdbnull.aspx)? –

+0

reader.IsDBNull() wymaga parametru integer. Wolałbym używać parametrów ciągów. – MothraTL

+0

Można: 'reader.IsDbNull (reader.GetOrdinal (" fieldname "))' –

Odpowiedz

7

Biorąc pod uwagę, że DBNull.Value jest jedyną wartością inną niż null dla klasy DBNull, obie są faktycznie równoważne. Które z nich są bardziej czytelne? Osobiście podoba mi się pierwsza wersja, ale twój przebieg może się różnić.

Jest mało prawdopodobne, aby był to problem pod względem wydajności w obu kierunkach.

4

Można również sprawdzić w ten sposób:

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

W celu omówienia, to właśnie Convent.IsDBNUll robi za kulisami: publiczny statyczne BOOL IsDBNull (wartość obiektu) { \t jeśli (wartość == DBNull.Value) \t { \t \t powrotu prawdziwa; \t} \t IConvertible cabrio = value as IConvertible; \t return convertible! = Null && convertible.GetTypeCode() == TypeCode.DBNull; } – MothraTL

2

myślę Microsoft zazwyczaj zaleca stosowanie Convert.IsDBNull ponieważ mają one tendencję do chcą Państwo korzystać Konwersja dla większości przejściowe i sprawdziany równoważności.

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

Można określić, czy wartość pobrana z pola bazy danych jest wartością DBNull przekazując wartość tej dziedzinie metody DBNull.Value.Equals. Niektóre metody dostarczania języków i obiektów bazy danych pozwalają jednak łatwiej określić, czy wartość pola bazy danych to DBNull.Value. Należą do nich funkcja Visual Basic IsDBNull, metoda Convert.IsDBNull, metoda DataTableReader.IsDBNull i metoda IDataRecord.IsDBNull.

Powiązane problemy