jueves, 31 de enero de 2008

AllowDBNull

Mi inglés es bastante malo, pero esto se entiende bastante bien. Se trata de una propiedad de los DataSet fuertemente tipados, de Visual Studio 2005. Sus posibles valores son True o False. Bueno vale, realmente es una propiedad de los campos de las tablas de los DataSet fuertemente tipados, pero nos entendemos.

Parece muy sencillo, ¿verdad? Y lo es hasta que intentas utilizarlo. Pongamos por caso que siguiendo las recomendaciones te creas un DataSet tipado y en una de las columnas, por necesidades del guión, le marcas ese AllowDBNull a True. Luego, en un arranque de euforia decides cargar datos desde un fichero XML -que no se cómo hemos podido vivir hasta hoy sin el formato XML-.

Y es en ese momento donde el muy borde de Visual Studio te suelta un mensaje del estilo "estás intentando meter un valor null". Claro, contestas tú, y ese campo admite valores nulos, porque yo lo he puesto, y porque da la casualidad de que ese es precisamente el valor en la base de datos. No un cero, ni una cadena de caracteres vacía, ni el 01/01/1900. El valor exacto es null, que se representa en Visual Studio 2005 como DBNull.

Y es que resulta que no, que el hecho de que la propiedad se llame AllowDBNull no significa que "Allow DBNull", sino que debe significar otra cosa misteriosa y desconocida que un cachondo de Microsoft puso en un día de inspiración.

Como no terminaba de creérmelo, busqué una solución por los foros de Microsoft, pensando que era yo quién lo estaba haciendo mal. Pero resulta que no, que en un post de los foros en inglés un tipo -que tenía la oportunidad de hablar con el desarrollador del invento-, contaba que la implementación de esta propiedad fue paralela a la de las variables tri-estado -recordemos que hasta C# 3.0 no hay variables que permitan null-, así que pa'qué te digo que si, si no.

Con lo que si estás leyendo esto ya sabes, no te molestes en creerte lo de AllowDBNull, porque es un engaña-tontos. Y yo el primero.

1 comentario:

Anónimo dijo...

Si es que como el Delphi no hay ninguno...

;-)
Rafa.