sql >> Databasteknik >  >> RDS >> Oracle

Angiven cast är inte giltig när DataTable fylls i från OracleDataAdapter.Fill()

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!



  1. Mysql-fel:Användaren som har angetts som definierare ('mysql.infoschema'@'localhost') existerar inte' när han försöker dumpa tabellutrymmen

  2. Skapa rollbaserad åtkomstkontroll i MongoDB

  3. Lista över Datetime Format Elements i Oracle

  4. JPA eclipse två främmande nycklar @IdClass implementeringsfel