none
PROBLEMA NO SELECT DENTRO DA APLICÃO RRS feed

  • 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???

    quarta-feira, 29 de abril de 2015 23:58

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
    quinta-feira, 30 de abril de 2015 10:41
  • 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
    quinta-feira, 30 de abril de 2015 12:35
  • 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
    quinta-feira, 30 de abril de 2015 12:47

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
    quinta-feira, 30 de abril de 2015 10:41
  • 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... 

    quinta-feira, 30 de abril de 2015 12:28
  • 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
    quinta-feira, 30 de abril de 2015 12:35
  • 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
    quinta-feira, 30 de abril de 2015 12:47
  • Tem razão Natan.

    Eu preciso realmente inserir como nulo na aplicação pois metade do meu banco não tem CPF inserido, e consta como nulo, vou inserir esses códigos e te dou um retorno.

    Muito obriagado.

    quinta-feira, 30 de abril de 2015 13:33
  • 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
    quinta-feira, 30 de abril de 2015 18:16
  • LEMBRANDO

    no sistema que estou desenvolvendo, eu não faço nenhum tipo de cadastro para incluir no oracle, apenas faço consultas para mostrar na tela da minha aplicação.

    quinta-feira, 30 de abril de 2015 18:19