COMO TRABALHAR COM CAMPO NULL

JCMSIS 06/11/2012 15:50:22
#413620
Eu tenho alguns campos na minha tabela que estão Null, como eu trato isso na hora de pesquisar esses campos em C# no asp.net?
Alguem pode me ajudar por favor?
KERPLUNK 06/11/2012 16:02:52
#413623
Resposta escolhida
Bem, você não vai pesquisar com C#, mas sim com SQL...
Select * from TABELA where CAMPO IS NULL
ou
Select * from TABELA where CAMPO NOT IS NULL

Lembrando, Null, não é valor, não é zero e não é espaço em branco, portanto não vai [Ô]entre aspas[Ô]
JCMSIS 06/11/2012 16:06:48
#413624
Certo qto a isso eu sabia, mas talvez nao tenha me expressado bem, vou tentar explicar:

o resultado do select traz diversos campos pois fiz ele assim [Ô]Select * From XXXX[Ô]

alguns campos dessa pesquisa estão Null, como eu trato isso no sistema C# em Asp.net?
KERPLUNK 06/11/2012 16:16:42
#413627
Não sei bem o que você quer dizer com [Ô]tratar[Ô], campos com valor null, são absolutamente normais e devem ser sempre esperados. Se você quer que a consulta traga somente registros em que um determinado campo não contenha null, use os critérios de seleção como mostrei acima...
JCMSIS 06/11/2012 16:26:13
#413630
Resultado do select eu chamo assim no sistema:

TxtFechamento.Text = (String)dr[[Ô]Fechamento[Ô]];

Se o campo Fechamento for NULL ele dá erro, eu quero uma forma de tratar isso para evitar esse erro tem como?
KERPLUNK 06/11/2012 17:30:23
#413635
Tem várias formas:
1 - Criar uma classe com métodos de extensão para cada tipo de dado para leitura
2 - Usar um ternário

Exemplo de ternario:
TxtFechamento.Text = dr[[Ô]Fechamento[Ô]] == DBNull.Value ? [Ô][Ô] : (String)dr[[Ô]Fechamento[Ô]];

Eu não recomendo muito um ternário, pois fica meio complicado se tiver muitos campos. O melhor seria mesmo criar uma classe com métodos de extensão:
[Em uma classe separada]

namespace ClassesExtensao
{
public static class Extensoes
{
using System.Data.SqlClient;
public static string GetString(this SqlDataReader dr, string NomeCampo)
{
if (dr.GetValue(dr.GetOrdinal(NomeCampo)) == DBNull.Value)
return [Ô][Ô];
else
return dr.GetString(dr.GetOrdinal(NomeCampo));
}
}
}


Depois disso pronto, onde quer que você queira ler dados de um SqlDataReader, adicione a referência do namespace dessa classe:

using ClassesExtensao;


Então, você vai notar que ao digitar dr.GetString, vai ter um método de extensão(o que você fez) que já faz esse tratamento, dispensando o uso de ternários. E você pode fazer isso com qualquer coisa, qualquer coisa mesmo, pode extender até mesmo um int, Int32, String... o céu é o limite.

Qualquer dúvida post ae
Tópico encerrado , respostas não são mais permitidas