DÊVIDA CONCEITUAL

LUIS.HERRERA 30/07/2015 10:09:36
#449390
Bom Dia!
Estava pesquisando sobre a melhor forma de garantir a conversão de dados ao recebê-los do banco e evitar também erro de campos nulos.

Resumidamente Fazia assim e funcionava perfeitamente:

  
SqlDataReader dr = null;
try
{
dr = cmd.ExecuteReader();
minhaEntidade.ID = dr[[Ô]ID[Ô]] == DBNull.Value ? 0 : Convert.ToInt32(dr[[Ô]ID[Ô]]);
minhaEntidade.Nome = dr[[Ô]NOME[Ô]] == DBNull.Value ? string.Empyt : Convert.ToString(dr[[Ô]NOME[Ô]]);
minhaEntidade.Status = dr[[Ô]STATUS[Ô]] == DBNull.Value ? (byte)0 : Convert.ToByte(dr[[Ô]STATUS[Ô]]);
minhaEntidade.Inativo = dr[[Ô]INATIVO[Ô]] == DBNull.Value ? false : Convert.ToBoolean(dr[[Ô]INATIVO[Ô]]);
}


Após ler sobre a diferença entre cast e Convert.To... vi que poderia fazer assim para reduzir código e processamento:

  
SqlDataReader dr = null;
try
{
dr = cmd.ExecuteReader();
minhaEntidade.ID = Convert.ToInt32(dr[[Ô]ID[Ô]]);
minhaEntidade.Nome = Convert.ToString(dr[[Ô]NOME[Ô]]);
minhaEntidade.Status = Convert.ToByte(dr[[Ô]STATUS[Ô]]);
minhaEntidade.Inativo = Convert.ToBoolean(dr[[Ô]INATIVO[Ô]]);
}


Problema
Ao rodar o programa, se um campo for Null no banco o Convert não conseguisse identificar o Null do objeto Reader. é isso mesmo? Terei de volta ao código inicial fazendo a checagem antes também para garantir?

OCELOT 30/07/2015 11:16:36
#449394
Resposta escolhida
Sim, vai ter que verificar como fazia antes, pois o Convert.ToInt32 por exemplo verifica se o valor passado é null, porém o que vem do banco de dados não é null e sim DBNull.Value, que é um valor que ele não considera na hora de tentar converter.
LUIS.HERRERA 30/07/2015 11:23:29
#449397
Valeu Ocelot, perdi um dia ontem mudando isso, vou perder outro fazendo novamente. Obrigado.
Tópico encerrado , respostas não são mais permitidas