Oracle nombre de C# décimal
Je sais qu'il y a plusieurs discussions et de messages concernant ce problème dans internet et j'ai lu (et pas à chaque article, je dois l'avouer), mais aucun d'entre eux n'avaient pleinement me satisfaire.
Ma situation:
Je suis à l'aide d'ODP.net (la version de la dll 2.111.6.0) pour accéder à l'Oracle DB (version 10 + 11) et un DataReader pour récupérer les données (.NET 3.5, C#).
À l'aide de ce code entraîne dans un " Système.OverflowException (opération Arithmétique a entraîné un dépassement de capacité.)'
decimal.TryParse(oraReader.GetOracleDecimal(0).Value.ToString(),
NumberStyles.Any, null, out parsedOraDecimal)
et celui-ci donne une valeur '3,000000000000000000000000000000000000000000000000000000000 E-126'
decimal.TryParse(oraReader.GetOracleValue(0).ToString(),
NumberStyles.Any, null, out parsedOraDecimal)
Maintenant, je dois trouver un moyen de le récupérer et d'évaluer cette valeur correctement - le DB est également utilisé dans d'autres applications qui sont hors de mon contrôle, si les modifications ne sont pas possibles.
De la conversion de types dans mon code C# de 'virgule' à 'double' n'est pas vraiment une option.
Des idées?
OriginalL'auteur robert.oh. | 2009-12-15
Vous devez vous connecter pour publier un commentaire.
J'ai juste eu un problème similaire, et essayé l'approche de l'évolution de la OracleDataAdapter de retour Oracle des types spécifiques ( data_adapter.ReturnProviderSpecificTypes = true; ), mais c'est juste un pain PITA, vous vous retrouvez casting OracleStrings retour à cordes, etc.
À la fin, je l'ai résolu en faisant la précision d'arrondi dans l'instruction SQL à l'aide de l'Oracle de la fonction round:
Dotnet sera alors heureux de convertir la figure à une décimale.
Cela échoue sur de très grands nombres
OriginalL'auteur Dave Glassborow
OracleDecimal a une plus grande précision que le décimal. Pour cette raison, vous devez réduire la précision de la première. Oubliez tous les l'analyse, l'utilisation de la conversion implicite. Essayez quelque chose le long des lignes de (non testé):
Merci, j'ai utilisé ce que ma solution. ma première fois de travailler avec le fournisseur Oracle n'a pas été des plus agréables....
eschneider: Oracle a eu la plus grande precission avant de C# a été inventé, de sorte qu'ils ont à faire quelque chose qui permet d'utiliser toute la précision de la base de données de a à offrir.
OriginalL'auteur Erich Kitzmueller