¿Hay alguna diferencia entre null y System.DBNull.Value? ¿Y si si, que?¿Cuál es la diferencia entre null y System.DBNull.Value?
me di cuenta de este comportamiento ahora -
while (rdr.Read())
{
if (rdr["Id"] != null) //if (rdr["Id"] != System.DBNull.Value)
{
int x = Convert.ToInt32(rdr["Id"]);
}
}
Mientras recuperar datos de la base de datos utilizando un datareader SQL, aunque no hay valor devuelto if(rdr["Id"] != null)
regresado true
y, finalmente, lanzó una excepción para la fundición de un nulo como entero.
Pero, esto si uso if (rdr["Id"] != System.DBNull.Value)
devuelve false
.
¿Cuál es la diferencia entre null y System.DBNull.Value?
Bueno, no tienen relación. Una es una instancia estática de una clase en 'System.Data', y la otra es un valor especial que significa la falta de un referente. No tienen nada que ver el uno con el otro. ¿Puedes explicar en qué estás confundido? ¿Es su verdadera pregunta "por qué' DataRows' y 'DataReaders' ponen' DBNull.Value' dentro de sí mismos en lugar de 'null'?" – mquander
Bueno, mi no fue inicialmente pero después de aprender de lo que dijiste, tengo curiosidad. ¿Podría decirme por qué DataRows y DataReaders ponen DBNull.Value en sí mismos en lugar de nulo? – pavanred
No estoy seguro de mí mismo. Aquí hay una respuesta: http://stackoverflow.com/questions/4488727/what-is-the-point-of-dbnull/4488758#4488758 También es posible que antes de que los tipos de valores anulables estuvieran en C#, habría sido más de una molestia para lidiar con 'null'. – mquander