Usuário com melhor resposta
Objeto não pode ser convertido de DBNull em outros tipos (Erro ao executar método Consulta). C#

Pergunta
-
Se poderem me ajudar ... Retorna este erro quando vou fazer uma pesquisa e não coloco nada no textBox, ele trás os campos vazios.
Porém quando eu vou inserir algum campo e click, ele dá um erro no método e cai na exception:
Additional information: Erro ao consultar a Cliente/Pessoa por código. Detalhes: System.InvalidCastException: Objeto não pode ser convertido de DBNull em outros tipos.
O meu código é esse: public PessoaCollection consultarPessoa_Cod(string codPessoa)
{
try
{
PessoaCollection pessoaCollection = new PessoaCollection();
ordemServicoDAL.LimparParametros();
ordemServicoDAL.AdicionarParametros("@codPessoa",codPessoa);
DataTable dataTablePessoa = ordemServicoDAL.executarConsulta(CommandType.StoredProcedure,"USP_CLIENTE_CONSULTAR_COD");
foreach (DataRow dataRowLinha in dataTablePessoa.Rows)
{
PessoaDTO pessoaDTO = new PessoaDTO();
CepDTO cepDTO = new CepDTO();
LogradouroDTO logradouroDTO = new LogradouroDTO();
BairroDTO bairroDTO = new BairroDTO();
EstadoDTO estadoDTO = new EstadoDTO();
CidadeDTO cidadeDTO = new CidadeDTO();
TelefoneDTO telefoneDTO = new TelefoneDTO();
EmailDTO emailDTO = new EmailDTO();
pessoaDTO.CodPessoa = Convert.ToInt32(dataRowLinha["codPessoa"]);
pessoaDTO.Nome = Convert.ToString(dataRowLinha["nome"]);
pessoaDTO.DataCadastro = Convert.ToDateTime(dataRowLinha["dataCadastro"]);
pessoaDTO.TipoPessoa = Convert.ToBoolean(dataRowLinha["tipo_pessoa"]);
pessoaDTO.Cpf = Convert.ToInt32(dataRowLinha["cpf"]);
pessoaDTO.Rg = Convert.ToString(dataRowLinha["rg"]);
pessoaDTO.Nascimento = Convert.ToDateTime(dataRowLinha["nascimento"]);
pessoaDTO.Cnpj = Convert.ToInt32(dataRowLinha["cnpj"]);
pessoaDTO.Ie = Convert.ToInt32(dataRowLinha["ie"]);
cepDTO.Cep = Convert.ToString(dataRowLinha["cep"]);
logradouroDTO.Nome = Convert.ToString(dataRowLinha["nome_Logradouro"]);
logradouroDTO.Complemento = Convert.ToString(dataRowLinha["complemento"]);
logradouroDTO.Numero = Convert.ToString(dataRowLinha["numero_logradouro"]);
bairroDTO.Nome = Convert.ToString(dataRowLinha["bairro"]);
estadoDTO.Uf = Convert.ToString(dataRowLinha["uf"]);
cidadeDTO.Nome = Convert.ToString(dataRowLinha["nome"]);
telefoneDTO.Telefone = Convert.ToString(dataRowLinha["telefone"]);
emailDTO.Email = Convert.ToString(dataRowLinha["email"]);
pessoaCollection.Add(pessoaDTO);
}
return pessoaCollection;
}
catch (Exception erro)
{
throw new Exception ("Erro ao consultar a Cliente/Pessoa por código. Detalhes: "+ erro);
}}
Respostas
-
Se algum de seus valores do DTO podem ser nulos, você não poderá fazer a conversão direta (Convert.To*).
Você precisa verificar se o valor no DataRow é igual a DBNull.Value e atribuir um valor padrão a sua propriedade no DTO (ou simplesmente não atribuir nada).
Juliano Nunes - http://linkedin.com/in/julianonunes
Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.
Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.
- Sugerido como Resposta welington jrModerator segunda-feira, 22 de maio de 2017 13:06
- Marcado como Resposta Guilherme Macedo SModerator quinta-feira, 25 de maio de 2017 17:50
Todas as Respostas
-
Se algum de seus valores do DTO podem ser nulos, você não poderá fazer a conversão direta (Convert.To*).
Você precisa verificar se o valor no DataRow é igual a DBNull.Value e atribuir um valor padrão a sua propriedade no DTO (ou simplesmente não atribuir nada).
Juliano Nunes - http://linkedin.com/in/julianonunes
Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.
Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.
- Sugerido como Resposta welington jrModerator segunda-feira, 22 de maio de 2017 13:06
- Marcado como Resposta Guilherme Macedo SModerator quinta-feira, 25 de maio de 2017 17:50
-
Bom dia,
Por falta de retorno esta thread esta encerrada !
Por gentileza, caso necessário abra uma nova thread.
Atenciosamente,
Guilherme Macedo S
Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita
TechNet Community Support
Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.