Oracle
 sql >> Database >  >> RDS >> Oracle

Il cast specificato non è valido quando si compila DataTable da OracleDataAdapter.Fill()

Rispondendo alla mia stessa domanda:

Quindi sembra che il tipo numerico Oracle possa contenere molte più posizioni decimali rispetto al tipo decimale C# e se Oracle sta cercando di restituire più di quanto C# può contenere, genera InvalidCastException.

Soluzione?

Nel tuo sql, arrotonda tutti i risultati che potrebbero avere troppe cifre decimali a qualcosa di sensato. Quindi ho fatto questo:

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

E ha funzionato.

Il take away è:Incompatibilità tra il tipo di numero Oracle e C# decimale. Limita le tue posizioni decimali Oracle per evitare eccezioni di cast non valide.

Spero che questo aiuti qualcun altro!