Svarar på min egen fråga:
Så det verkar som om Oracle-nummertypen kan innehålla många fler decimaler än C#-decimaltypen och om Oracle försöker returnera mer än C# kan hålla, kastar den InvalidCastException.
Lösning?
I din sql, avrunda alla resultat som kan ha för många decimaler till något vettigt. Så jag gjorde så här:
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
Och det fungerade.
Take away är:Inkompatibilitet mellan Oracle-nummertyp och C# decimal. Begränsa dina Oracle-decimaler för att undvika de ogiltiga cast-undantagen.
Hoppas detta hjälper någon annan!