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!