Esta mañana y después de ver esta entrada en el foro de c# Obtener los registros de una tabla como objetos y guardarlos en una lista y más concretamente estas líneas de código.
1: object fechaNacim = reader["FechaNacim"];
2: FechaNacimiento = fechaNacim == DBNull.Value ? null : (DateTime)fechaNacim;
Me han llegado a la cabeza recuerdos del pasado, mucho antes de la existencia de .Net. Os acordáis de ese error típico de las aplicaciones vb “error 91 object variable or with block variable not set”. Y después muerte. Pues ha llovido, pero lo seguimos teniendo presente en nuestras vidas.
Después de citar al viejo vb donde esto se solucionaba con esto
1: if isnull(ADODC.Recordset.Fields("Cod_Localidad")) then
2: end if
avanzamos en el tiempo y nos encontramos en la misma o parecida situación un null de la bb.dd nos ocasiona y no pocos problemas.
Si nos situamos en el año 2002 aparece un nuevo señor para solucionarnos el problema DBNull.Value, que pasada. Ya no aparece el error 91 pero si FormatException.
1: var ValorBd = System.DBNull.Value;
2: int Valor = int.Parse(ValorBd.ToString())
Y también SqlNullValueException.
1: using (SqlConnection cn = new SqlConnection(@"<Cadena de Conexion>"))
2: {
3: cn.Open();
4: SqlCommand cmd = new SqlCommand("SELECT CAST(NULL AS INT)",cn);
5: SqlDataReader reader = cmd.ExecuteReader();
6: while(reader.Read())
7: {
8: int Valor = reader.GetInt32(0);
9: }
10: }
y en vez de tener un premio que era lo que se conseguía antes de .Net obtenemos dos.
Bueno como una de nuestras virtudes es la paciencia esperamos a 2005 y aparece una de las maravillas del Framework 2.0 System.Nullable<T> o para quien más le guste “?” detrás del tipo, parece que el problema está solucionado, pero no, simplemente con profundizar un poco nos damos cuenta que las clases del namespace System.Data se han quedado igual y es por eso por lo que esta mañana para leer un null nos encontramos con las primeras líneas de código de este post.
Seguimos avanzando años y vemos que ese problema parece que se va a convertir en un mal menor con la aparición de Entity Framework y la realidad que así es, pero sigue sin ser perfecto.
Si reflexionamos han pasado por lo menos para mí 20 años y seguimos pensado en Null.
Bueno he de reconocer que desde 2005 yo deje de pensar en el y eso es material para el próximo post o mejor dicho un capitulo más de esta historia.
Próximos capítulos.
Como puedo vivir mejor con Null sino utilizo Entity Framework.
Que le falta a EF desde mi punto de vista para de una vez olvidarnos del Null.
Como una de las cosas que más me gusta es el debate vamos a empezar con un aperitivo. ¿Debería string tener un tipo Nullable o lo que es lo mismo declarar este como “?string” ?
Espero que os haya gustado y sobre todo espero vuestra reflexión acerca de la pregunta.