Question

Je sais qu'il ya plusieurs sujets et messages à ce sujet sur Internet et je les ai lu (pas chaque article, je dois admettre), mais aucun d'eux ne m'a complètement satisfait.

Ma situation:
J'utilise ODP.net (version dll 2.111.6.0) pour accéder à la base de données Oracle (version 10 + 11) et un DataReader pour récupérer les données (.NET 3.5, C #).

L'utilisation de ce code entraîne dans un ' System.OverflowException (opération arithmétique a donné lieu à un trop-plein.)


decimal.TryParse(oraReader.GetOracleDecimal(0).Value.ToString(), 
  NumberStyles.Any, null, out parsedOraDecimal)

et celui-ci se traduit par une valeur de ' 3,000000000000000000000000000000000000000000000000000000000E-126


decimal.TryParse(oraReader.GetOracleValue(0).ToString(), 
  NumberStyles.Any, null, out parsedOraDecimal)

Maintenant, je dois trouver un moyen de récupérer et d'évaluer correctement cette valeur - la DB est également utilisé d'autres applications qui sont hors de mon contrôle change donc il ne sont pas possibles

.

La conversion des types dans mon code C # de 'décimal' à 'double' est pas vraiment une option.

Toutes les idées?

Était-ce utile?

La solution

Je viens d'avoir un problème similaire, et essayé l'approche du changement de OracleDataAdapter pour revenir types Oracle (data_adapter.ReturnProviderSpecificTypes = true;), mais cela est juste un PITA, vous finissez par coulée OracleStrings dos aux cordes, etc.

En fin de compte je l'ai résolu en faisant la précision d'arrondi dans l'instruction SQL en utilisant la fonction tour d'Oracle:

SELECT round( myfield, 18 ) FROM mytable

Dotnet convertit alors joyeusement la figure à une décimale.

Autres conseils

OracleDecimal a une précision plus grande que décimal. Pour cette raison, vous devez réduire la précision d'abord. Oubliez l'analyse syntaxique, utilisez la conversion implicite. Essayez quelque chose le long des lignes de (non testé):

decimal d = (decimal)(OracleDecimal.SetPrecision(oraReader.GetOracleDecimal(0), 28));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top