2009-03-03 6 views
2

Le code ci-dessous est juste un test pour se connecter à une base de données Oracle et remplir des données vers un DataTable. Après l'exécution de l'instruction da.Fill (dt);, je reçois toujours l'exceptionToujours obtenir une exception lors de la tentative de remplissage de données vers DataTable

"exception de type 'System.OutOfMemoryException' a été levée."

Est-ce que quelqu'un a rencontré ce genre d'erreur? Mon projet s'exécute sur VS 2005 et ma version de base de données Oracle est 11g. Mon ordinateur utilise Windows Vista. Si je copie ce code pour fonctionner sur Windows XP, cela fonctionne très bien.

Merci.

using System.Data; 
using Oracle.DataAccess.Client; 

... 

string cnString = "data source=net_service_name; user id=username; password=xxx;"; 
OracleDataAdapter da = new OracleDataAdapter("select 1 from dual", cnString); 

try 
{ 
    DataTable dt = new DataTable(); 
    da.Fill(dt); // Got error here 
    Console.Write(dt.Rows.Count.ToString()); 

} 
catch (Exception e) 
{ 
    Console.Write(e.Message); // Exception of type 'System.OutOfMemoryException' was thrown. 
} 

Mise à jour

Je ne sais pas ce qui arrive à mon ordinateur. Je réinstalle juste Oracle 11g, et mon code fonctionne normalement.

+0

Les deux ordinateurs ont-ils les mêmes versions de pilotes Oracle et de fournisseur de données .NET? Y at-il des chemins disponibles pour les pilotes Oracle pour Vista, vous n'avez pas installé? –

Répondre

0

Quelle est la taille de votre table dual? Cette requête:

select 1 from dual 

retourne une seule table-colonne avec autant de lignes que la table dual, avec 1 dans chaque ligne. Si la table contient des millions de lignes, cela ne me surprendrait pas si elle produisait une exception de mémoire insuffisante. Bien sûr, cela n'explique pas pourquoi cela fonctionnerait sous XP mais pas sous Vista, à moins que ce soit spécifique à l'implémentation (interrogation d'une instance différente de la base de données sur les deux postes de travail, par exemple).

Edit 2:

Ok, donc probablement il n'y a qu'une seule ligne dans dual depuis votre commentaire indique que la requête ne renvoie qu'une seule ligne.

Un couple de choses à enquêter sur:

  1. La connexion ADO.NET Oracle nécessite le logiciel client Oracle, non? Le logiciel Oracle de votre boîte Vista est-il la même que sur la boîte XP? Il y a peut-être une divergence. Au lieu d'afficher e.Message, essayez d'afficher e.ToString() pour obtenir une trace de pile complète - cela vous donnera peut-être plus d'informations sur l'origine de l'erreur.

+0

La requête renvoie uniquement 1 ligne et la valeur est 1. –

+0

Dans Oracle, vous ne pouvez pas écrire "select 1" comme dans MS SQL Sever. Mais il y a un double "pseudotable", donc vous pouvez écrire "select 1 from dual" et obtenir le même résultat. Voir: "http://en.wikipedia.org/wiki/DUAL_table". –

+0

Ah bon à savoir - merci @tomekszpakowicz! –

Questions connexes