sql >> Database >  >> RDS >> Oracle

Opgegeven cast is niet geldig bij het invullen van DataTable vanuit OracleDataAdapter.Fill()

Mijn eigen vraag beantwoorden:

Het lijkt er dus op dat het Oracle-nummertype veel meer decimalen kan bevatten dan het C#-decimaaltype en als Oracle meer probeert terug te geven dan C# kan bevatten, wordt de InvalidCastException gegenereerd.

Oplossing?

Rond in uw sql alle resultaten met te veel decimalen af ​​op iets zinnigs. Dus ik deed dit:

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

En het werkte.

De take-away is:Incompatibiliteit tussen Oracle-nummertype en C#-decimaal. Beperk uw Oracle-decimaaltekens om de ongeldige cast-uitzonderingen te voorkomen.

Ik hoop dat dit iemand anders helpt!



  1. mysql-replicatie (TokuDB-replica):Kolom X van tabel 'database.table' kan niet worden geconverteerd van type 'varchar(Y)' naar type 'varchar(Y)'

  2. PHP:update meerdere MySQL-velden in één query

  3. Kan ik veilig vertrouwen op kolomnaam in mysql?

  4. Verzamel rijen voor de laatste 10 datums