sql >> Base de Datos >  >> RDS >> Oracle

La conversión especificada no es válida cuando se completa DataTable desde OracleDataAdapter.Fill()

Respondiendo a mi propia pregunta:

Por lo tanto, parece que el tipo de número de Oracle puede contener muchos más lugares decimales que el tipo decimal de C# y si Oracle intenta devolver más de los que puede contener C#, lanza la InvalidCastException.

¿Solución?

En su sql, redondee cualquier resultado que pueda tener demasiados lugares decimales a algo sensato. Así que hice esto:

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

Y funcionó.

La conclusión es:incompatibilidad entre el tipo de número de Oracle y el decimal de C#. Restrinja sus lugares decimales de Oracle para evitar las excepciones de conversión no válidas.

¡Espero que esto ayude a alguien más!