Pregunta

En mi base de datos, tengo algunas columnas en una de mis tablas que son valores bit (booleanos). Se les permite ser NULL ya que los campos no siempre van a contener datos.

He pasado por el proceso de crear un conjunto de datos XSD usando la tabla y me he asegurado de que el campo AllowDBNull esté establecido en True.

Sin embargo, cuando extraigo un registro de la base de datos en la tabla de datos usando el método GetData configurado, me encuentro con el siguiente error:

[InvalidCastException: Conversion from type 'DBNull' to type 'Boolean' is not valid.]

¿Necesito especificar algo diferente al campo Valor predeterminado para la columna, o hay algún otro campo para configurar?

Todavía estoy en la fase de desarrollo con este proyecto, por lo que si prefiero cambiar los campos a un carácter y usar una opción S / N / NULL, no soy demasiado adverso para seguir así.

¿Fue útil?

Solución

En mi humilde opinión, no debe permitir nulos en un campo bit / booleano.

Mike Hadlow tiene una buena publicación sobre esto aquí:

http://mikehadlow.blogspot.com/2006/10/nullability -voodoo.html

Boolean es, por definición, un tipo de dos estados. Al hacerlo anulable, está agregando un tercer estado. Volverá para atormentarte en algún momento.

Otros consejos

Tengo que estar en desacuerdo con Iain. La lógica de tres valores es tan viable como la lógica de 2 valores. La persona en la mesa está viva o muerta o no sabes si está viva o muerta. Si Mike se saliera con la suya, no podrías usar un poco aquí. Necesitaría un FK para una tabla de estado, 1 = Vivo, 2 = Muerto, 3 = Desconocido.

Todo el propósito del bit es ahorrar espacio, siempre puedes hacer que la columna sea un CHAR (1) con una restricción que limite los valores a T o F, Y o N (o U).

Pero creo que Iain está malinterpretando lo que Mike está diciendo. Mike no desalienta el uso de Nulls, después de todo, cree que la columna EndDate debería ser nula hasta que se complete el proceso. Solo dice que no impongas un valor nulo en la columna con propiedades místicas ... como si fuera la clave para saber si un proceso está en un cierto estado.

De hecho, los Nulos en una base de datos tienen ciertos efectos secundarios muy útiles. Oracle (tal vez otras bases de datos) no indexa nulos. Por lo tanto, si tiene una columna donde solo un valor es importante, como decir que tiene una lista de empleados que nunca purga y una columna de bits Is_Active_Employee que está indexada. En este caso, para una empresa establecida, el número de empleados que ha tenido es > > > que la cantidad de empleados que tiene ahora. Digamos que tiene 1% de 1 y 99% de 0.

Ese índice es 99 veces más grande de lo necesario. Está indexando todos los 1, lo cual está bien ya que son el 1% de la tabla, pero también está cargado con 0 para las filas que NUNCA PODRÍAS usar ese índice para encontrar. Si desea que todos los empleados estén inactivos, se ignorará el indexado y se realizará un FTS. Entonces 1 y NULL serían MUCHO más eficientes desde una perspectiva de base de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top