viernes, 12 de junio de 2009

Null y DBNull hermanos pero no gemelos

Hace poco me encontré con que este código

Total= (monto_evaluar== null) ? 0 : Convert.ToDecimal(monto_evaluar);
genera el error:

Object cannot be cast from DBNull to other types

Resulta que la variable monto_evaluar estaba declarada como object y ademas se obtenía directamente de un Dataset. Pues bien cuando se hacen cosas como estas hay que tener en mente que desde la base de datos en caso de que el dato este nulo, no se devuelve un null si no un tipo dato DBNull. Ellos son hermanos pero no gemelos, significan prácticamente lo mismo pero son tipos de dato diferentes y, adicionalmente, si un objeto es de tipo DBNull no se puede castear (convertir) en ningún otro tipo ni siquiera para comparar y éste es precisamente el error que se nos muestra.

La línea de código debe quedar como sigue:
Total=(monto_evaluar== System.DBNull.Value) ? 0 : Convert.ToDecimal(monto_evaluar);

De esta forma comparamos utilizando el tipo de dato correcto.

1 comentarios: