2012-06-19 9 views
6

Tengo una pregunta C#. Solo quería preguntar a la comunidad sobre el uso de System.DBNull junto con el uso de un DataReader.evaluando DBNull: verificando la igualdad o usando el operador 'es'?

Al consultar una base de datos y verificar valores nulos, ¿cuál es la más apropiada/preferida?

Utilizando el 'is' operador:

reader["fieldname"] is DBNull 

o simplemente comprobar el valor:

reader["fieldname"] == DBNull.Value 

Ambos parecen funcionar. Solo quería obtener algunas otras opiniones.

+4

Por qué no usar [reader.IsDBNull] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.isdbnull.aspx)? –

+0

reader.IsDBNull() requiere un parámetro entero. Preferiría usar parámetros de cadena. – MothraTL

+0

Puede: 'reader.IsDbNull (reader.GetOrdinal (" fieldname "))' –

Respuesta

7

Dado que DBNull.Value es el único valor no nulo para la clase DBNull, los dos son efectivamente equivalentes. ¿Cuál te parece más legible? Personalmente, me gusta bastante la primera versión, pero su kilometraje puede variar.

Es poco probable que sea un problema en términos de rendimiento en ambos sentidos.

4

Puede comprobar también de esta manera:

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

En aras de la discusión, esto es lo que Convent.IsDBNUll está haciendo entre bastidores: public IsDBNull bool estático (valor de objeto) { \t si (valor == DBNull.Value) \t { \t \t return true; \t} \t IConvertible convertible = valor como IConvertible; \t return convertible! = Null && convertible.GetTypeCode() == TypeCode.DBNull; } – MothraTL

2

Creo Microsoft recomienda generalmente usando Convert.IsDBNull ya que tienden a querer que usted use Convertir durante la mayor conversión y la comprobación de la equivalencia.

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

Puede determinar si un valor recuperado de la base de datos de un campo es un valor DBNull pasando el valor de ese campo con el método DBNull.Value.Equals. Sin embargo, algunos idiomas y objetos de bases de datos proporcionan métodos que facilitan la determinación de si el valor de un campo de base de datos es DBNull.Value. Estos incluyen la función IsDBNull de Visual Basic, el método Convert.IsDBNull, el método DataTableReader.IsDBNull y el método IDataRecord.IsDBNull.

Cuestiones relacionadas