2010-11-08 8 views
1

J'ai un code qui est responsable de la conversion des données d'un IDataReader en IronPython.Runtime.List de PythonTuples. Ce même code est employé pour plusieurs types de connexions de bases de données (y compris Access, Oracle et MySql).IDataReader d'Oracle déborde lors du renvoi des valeurs décimales

Le type de données Oracle OracleDecimal provoque un débordement lors de l'appel dataReader.GetValues() lorsque le curseur contient une valeur avec une grande précision. Ce problème a été bien documenté et les solutions impliquent toujours l'utilisation de méthodes spécifiques sur le OracleDataAdapter. J'ai seulement une interface IDataReader.

Y at-il un moyen de contourner ce problème sans lier mon code spécifiquement à ODP.NET? Sûrement il doit y avoir un moyen d'obtenir à ces données d'une manière agnostique de fournisseur?

Répondre

0

La seule méthode agnostique fournisseur que je suis au courant est d'arrondir les valeurs votre déclaration select. J'ai trouvé que l'arrondi à 15 décimales fait habituellement l'affaire.

+0

Je devais retourner au gars qui a écrit le script et l'amener à changer spécifiquement le SQL qu'il utilise. Triste, mais je n'avais pas le choix. – Dan

0

Il ne peut pas être exactement ce que vous cherchez, mais la classe System.Data.Common.DbDataReader a une fonction GetProviderSpecificValues qui peut faire ce que vous voulez

+0

Il y a deux problèmes avec cette approche: (1) Je n'ai qu'une référence à une interface, et (2) une fois que j'ai récupéré un OracleDecimal, le seul handle que j'aurais à faire serait un 'object' . – Dan

Questions connexes