Usuário com melhor resposta
PROBLEMA NO SELECT DENTRO DA APLICÃO

Pergunta
-
AMIGOS ,
BOA NOITE.
MEU SISTEMA ESTÁ FAZENDO UM SELECT NO SQL BASEADO EM UM LINKED SERVER DE UM SERVIDOR ORACLE. ATÉ AI OK.
ACONTECE QUE NA MINHA APLICAÇÃO COMO MOSTRA A FIGURA ABAIXO, QUANDO EU FAÇO UMA PESQUISA COM O NOME EXEMPLO: FERNANDA, CARLOS, JOÃO ELE PUXA NORMALMENTE. MAS QUANDO EU FAÇO UMA BUSCA NO NOME FRANCISCO, UM NOME BEM COMUM ELE ME RETORNA O SEGUINTE ERRO:
Objeto não pode ser convertido de DBNull em outros tipos.
É COMO SE ELE RETORNASSE MUITA INFORMAÇÃO PARA O DATAGRID E DESSE ESSE ERRO.
ALGUEM PODE ME AJUDAR???
Respostas
-
você não precisa criar conversões de tipos nos casos das propriedades do tipo string.
Algum desses campos para o FRANCISCO está DBNull, com isso o erro.
altere
paciente.CAMPO = Convert.ToString(linha["CAMPO"]) ;
para
paciente.CAMPO = linha["CAMPO"].ToString();
Natan
- Marcado como Resposta Felipe STW quinta-feira, 30 de abril de 2015 18:16
-
Bom dia, Natan.
O erro persiste.
Natan, fiz alguns testes...
Fui fazendo o select parâmetro por parâmetro e quando eu incluo a IDADE, ele me retorna o erro. Logo, percebi que no meu banco de dados, alguns dados realmente estão nulos como: CODIGO_PACIENTE, PRONTUARIO e até mesmo a IDADE. IDADE com 0 conta como nulo também? Porque no banco de dados eu vejo idade 0 e idade NULL.
Como resolvo nesse caso? Uma solução seria corrigir os parâmetros nulos, ou até mesmo excluir o paciente certo?Até porque excluindo é uma forma de limpar o banco...
Olá Felipe,
para os campos que são retornados como nulo você deve fazer uma verificação antes e se for nulo, insira vazio para string ou 0 para int isso depende do que deve ser mostrado para o usuario veja exemplo :
//exemplo com Prontuario paciente.PRONTURAIO = DBNull.Value.Equals(linha["PRONTUARIO"]) ? string.Empty : linha["PRONTUARIO"].ToString();
Utilizando o operador unário fica melhor essa verificação, agora com questao de apagar os registros isso dedende das suas regras de negócio.
- Editado Daniel Brito br quinta-feira, 30 de abril de 2015 12:36
- Marcado como Resposta Felipe STW quinta-feira, 30 de abril de 2015 18:16
-
Felipe o que tem que fazer é antes de realizar a conversão verificar se o a coluna X não está nula.
Por exemplo:if(linha.IsNull("EMAIL") == false){ paciente.EMAIL = Convert.ToString(linha["EMAIL"]); }
- Marcado como Resposta Felipe STW quinta-feira, 30 de abril de 2015 18:16
Todas as Respostas
-
você não precisa criar conversões de tipos nos casos das propriedades do tipo string.
Algum desses campos para o FRANCISCO está DBNull, com isso o erro.
altere
paciente.CAMPO = Convert.ToString(linha["CAMPO"]) ;
para
paciente.CAMPO = linha["CAMPO"].ToString();
Natan
- Marcado como Resposta Felipe STW quinta-feira, 30 de abril de 2015 18:16
-
Bom dia, Natan.
O erro persiste.
Natan, fiz alguns testes...
Fui fazendo o select parâmetro por parâmetro e quando eu incluo a IDADE, ele me retorna o erro. Logo, percebi que no meu banco de dados, alguns dados realmente estão nulos como: CODIGO_PACIENTE, PRONTUARIO e até mesmo a IDADE. IDADE com 0 conta como nulo também? Porque no banco de dados eu vejo idade 0 e idade NULL.
Como resolvo nesse caso? Uma solução seria corrigir os parâmetros nulos, ou até mesmo excluir o paciente certo?Até porque excluindo é uma forma de limpar o banco...
-
Bom dia, Natan.
O erro persiste.
Natan, fiz alguns testes...
Fui fazendo o select parâmetro por parâmetro e quando eu incluo a IDADE, ele me retorna o erro. Logo, percebi que no meu banco de dados, alguns dados realmente estão nulos como: CODIGO_PACIENTE, PRONTUARIO e até mesmo a IDADE. IDADE com 0 conta como nulo também? Porque no banco de dados eu vejo idade 0 e idade NULL.
Como resolvo nesse caso? Uma solução seria corrigir os parâmetros nulos, ou até mesmo excluir o paciente certo?Até porque excluindo é uma forma de limpar o banco...
Olá Felipe,
para os campos que são retornados como nulo você deve fazer uma verificação antes e se for nulo, insira vazio para string ou 0 para int isso depende do que deve ser mostrado para o usuario veja exemplo :
//exemplo com Prontuario paciente.PRONTURAIO = DBNull.Value.Equals(linha["PRONTUARIO"]) ? string.Empty : linha["PRONTUARIO"].ToString();
Utilizando o operador unário fica melhor essa verificação, agora com questao de apagar os registros isso dedende das suas regras de negócio.
- Editado Daniel Brito br quinta-feira, 30 de abril de 2015 12:36
- Marcado como Resposta Felipe STW quinta-feira, 30 de abril de 2015 18:16
-
Felipe o que tem que fazer é antes de realizar a conversão verificar se o a coluna X não está nula.
Por exemplo:if(linha.IsNull("EMAIL") == false){ paciente.EMAIL = Convert.ToString(linha["EMAIL"]); }
- Marcado como Resposta Felipe STW quinta-feira, 30 de abril de 2015 18:16
-
-
Amigos,
Eu fiz o que vocês falaram mas continuou com o erro.
Consegui uma solução...
Eu alterei o tipo de variável que estava dando erro. Exemplo: A minha variavel idade no BD do Oracle está como Number e eu declarei como int, só fiz mudar para string como a linha abaixo
public string IDADE { get; set; }
paciente.IDADE = Convert.ToString(linha["IDADE"]);
Consigo fazer as consultas normalmente agora. A pergunte é: Pode ser uma solução? Vou ter problemas futuros?
Obrigado
- Marcado como Resposta Felipe STW quinta-feira, 30 de abril de 2015 18:17
- Não Marcado como Resposta Felipe STW quinta-feira, 30 de abril de 2015 18:17
-