DÊVIDA CONCEITUAL
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:
Após ler sobre a diferença entre cast e Convert.To... vi que poderia fazer assim para reduzir código e processamento:
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?
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?
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.
Valeu Ocelot, perdi um dia ontem mudando isso, vou perder outro fazendo novamente. Obrigado.
Tópico encerrado , respostas não são mais permitidas