Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Die angegebene Umwandlung ist beim Auffüllen von DataTable aus OracleDataAdapter.Fill() nicht gültig

Beantwortung meiner eigenen Frage:

Es scheint also, dass der Oracle-Zahlentyp viel mehr Dezimalstellen aufnehmen kann als der C#-Dezimaltyp, und wenn Oracle versucht, mehr zurückzugeben, als C# aufnehmen kann, löst es die InvalidCastException aus.

Lösung?

Runden Sie in Ihrem SQL alle Ergebnisse, die möglicherweise zu viele Dezimalstellen haben, auf etwas Vernünftiges. Also habe ich das gemacht:

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

Und es hat funktioniert.

Das Mitnehmen ist:Inkompatibilität zwischen Oracle-Zahlentyp und C#-Dezimalzahl. Beschränken Sie Ihre Oracle-Dezimalstellen, um ungültige Cast-Ausnahmen zu vermeiden.

Hoffe, das hilft jemand anderem!