2012-06-19 10 views
6

Ho una domanda C#. Volevo solo chiedere alla community l'uso di System.DBNull insieme all'utilizzo di un DataReader.valutazione DBNull: verifica dell'eguaglianza o utilizzo dell'operatore 'is'?

Quando si esegue una query su un database e si verifica la presenza di valori nulli, che è più appropriato/preferito?

Utilizzando il 'is' operatore:

reader["fieldname"] is DBNull 

o semplicemente controllando il valore:

reader["fieldname"] == DBNull.Value 

Entrambi sembrano funzionare. Volevo solo avere altre opinioni.

+4

Perché non utilizzare [reader.IsDBNull] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.isdbnull.aspx)? –

+0

reader.IsDBNull() richiede un parametro intero. Preferirei usare i parametri delle stringhe. – MothraTL

+0

È possibile: 'reader.IsDbNull (reader.GetOrdinal (" fieldname "))' –

risposta

7

Dato che DBNull.Value è l'unico valore non nullo per la classe DBNull, i due sono effettivamente equivalenti. Quale trovi più leggibile? Personalmente mi piace molto la prima versione, ma il tuo chilometraggio può variare.

È improbabile che sia un problema in termini di prestazioni in entrambi i casi.

4

È possibile controllare anche in questo modo:

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

Per motivi di discussione, questo è ciò che Convent.IsDBNUll sta facendo dietro le quinte: pubblico static bool IsDBNull (valore oggetto) { \t se (valore == DBNull.Value) \t { \t \t ritorno vero; \t} \t Convertibile convertibile = valore come IConvertible; \t return convertible! = Null && convertible.GetTypeCode() == TypeCode.DBNull; } – MothraTL

2

Credo che Microsoft consiglia generalmente utilizzando Convert.IsDBNull in quanto tendono a richiedere l'uso di Convertire per la maggior parte di conversione e controllo equivalenza.

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

È possibile determinare se un valore recuperato da un campo di database è un valore DBNull passando il valore di quel campo al metodo DBNull.Value.Equals. Tuttavia, alcuni linguaggi e oggetti di database forniscono metodi che rendono più semplice determinare se il valore di un campo di database è DBNull.Value. Questi includono la funzione IsDBNull di Visual Basic, il metodo Convert.IsDBNull, il metodo DataTableReader.IsDBNull e il metodo IDataRecord.IsDBNull.

Problemi correlati