Pergunta

No meu banco de dados, eu tenho algumas colunas em uma das minhas tabelas que são valores de bit (booleano). Eles são autorizados a ser NULL uma vez que os campos não são sempre vai conter dados.

Eu tenho ido através do processo de criação de um XSD DataSet usando a tabela e se certificou de que o campo AllowDBNull é definida como True.

No entanto, quando eu puxo um registro para baixo do banco de dados para a tabela de dados usando o método GetData configurado, eu me deparo com o seguinte erro:

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

Eu preciso especificar algo diferente do que no campo valor padrão para a coluna, ou há algum outro campo de jogo?

Estou na fase de desenvolvimento ainda com este projecto, por isso, se mudando os campos para um char e usando uma opção de Y / N / NULL é o preferido, eu não estou muito adverso para ir por esse caminho.

Foi útil?

Solução

IMHO você não deve permitir nulos em um campo de bits / booleano.

Mike Hadlow tem um bom post sobre isso aqui:

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

booleana é, por definição, um tipo bi-estadual. Ao torná-lo nulo, você está adicionando um terceiro Estado. Ele vai voltar para assombrá-lo em algum ponto.

Outras dicas

Eu tenho que discordar com Iain. lógica de três valor é tão viável como lógica 2 valor. A pessoa na tabela está vivo ou morto ou você não sabe se ele está vivo ou morto. Se Mike teve sua maneira, você não poderia usar um pouco aqui. Você precisa de uma FK para uma tabela de status, 1 = Alive, 2 = Morto, 3 = desconhecido.

O propósito do bit é para economizar espaço, pode sempre tornar a coluna CHAR (1) com um constrangimento que limita os valores de T ou F, Y ou N (ou L).

Mas eu acho que Iain está interpretando mal o que Mike está dizendo. Mike não é desencorajar o uso de nulos, depois de tudo o que ele pensa que a coluna EndDate deve ser nulo até que o processo é feito. Ele está apenas dizendo não imbuir um valor nulo na coluna com propriedades místicas ... como é a chave para saber se um processo está em um determinado estado.

Na verdade, valores nulos em um banco de dados tem certos efeitos colaterais muito úteis. Oracle (talvez outros bancos de dados) não indexa nulos. Então, se você tem uma coluna onde apenas um valor é importante - como dizer que você tem uma lista de funcionários que nunca purgar e uma coluna Bit Is_Active_Employee que está indexado. Neste caso, para um negócio estabelecido, o número de funcionários que você teve é ??>>> do que o número de funcionários que você tem agora. Digamos que você tenha 1% 1 e 99% 0 do.

Esse índice é 99x maior do que ele precisa ser. É indexar todos os 1s que é bom uma vez que são 1% da tabela, mas também é carregado com 0 do para linhas que você nunca poderia usar esse índice para encontrar. Se você quiser de todos os empregados inativos, o indexados seria ignorado e um FTS seria realizada. Então 1 e NULL seria muito mais eficiente do ponto de vista do banco de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top