Oracle
 sql >> Base de données >  >> RDS >> Oracle

La distribution spécifiée n'est pas valide lors du remplissage de DataTable à partir d'OracleDataAdapter.Fill()

Répondre à ma propre question :

Il semble donc que le type de nombre Oracle puisse contenir beaucoup plus de décimales que le type décimal C# et si Oracle essaie de renvoyer plus que C# ne peut en contenir, il lève l'exception InvalidCastException.

Solution ?

Dans votre sql, arrondissez tous les résultats qui pourraient avoir trop de décimales à quelque chose de sensé. Alors j'ai fait ça :

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

Et ça a marché.

La conclusion est la suivante :Incompatibilité entre le type de numéro Oracle et la décimale C#. Restreignez vos décimales Oracle pour éviter les exceptions de conversion non valides.

J'espère que cela aidera quelqu'un d'autre !