Besvarer mit eget spørgsmål:
Så det ser ud til, at Oracle-taltypen kan indeholde mange flere decimaler end C#-decimaltypen, og hvis Oracle forsøger at returnere mere, end C# kan indeholde, kaster den InvalidCastException.
Løsning?
I din sql skal du runde alle resultater, der kan have for mange decimaler, til noget fornuftigt. Så jeg gjorde dette:
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
Og det virkede.
Take away er:Inkompatibilitet mellem Oracle nummertype og C# decimal. Begræns dine Oracle-decimaler for at undgå de ugyldige cast-undtagelser.
Håber dette hjælper en anden!