Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

A conversão especificada não é válida ao preencher DataTable de OracleDataAdapter.Fill()


Respondendo minha própria pergunta:

Portanto, parece que o tipo de número do Oracle pode conter muito mais casas decimais do que o tipo decimal do C# e, se o Oracle estiver tentando retornar mais do que o C# pode conter, ele lançará o InvalidCastException.

Solução?

Em seu sql, arredonde quaisquer resultados que possam ter muitas casas decimais para algo sensato. Então eu fiz isso:
SELECT acct_no, ROUND(market_value/mv_total, 8)  -- rounding this division solves the problem
FROM myTable
WHERE NVL(market_value, 0) != 0
AND NVL(mv_total, 0) != 0

E funcionou.

A conclusão é:Incompatibilidade entre o tipo de número Oracle e o decimal C#. Restrinja as casas decimais do Oracle para evitar exceções de conversão inválidas.

Espero que isso ajude mais alguém!