nicompx
Messages postés107Date d'inscriptionlundi 16 janvier 2006StatutMembreDernière intervention15 juillet 2009
-
10 août 2006 à 14:06
samytto
Messages postés4Date d'inscriptionlundi 29 septembre 2008StatutMembreDernière intervention14 avril 2011
-
14 avril 2011 à 14:11
Bonjour,
Dans une boucle infinie (while), je vais lire dans une base de données Oracle.
Mais une erreur apparait après un certain nombre de passage.
Pouvez-vous me dire comment fermer les CURSEUR???
Erreur : ORA-01000: Nombre maximum de curseurs ouverts atteint
while()
{
try
{
string cde = "SELECT * FROM SMS_MO";
OracleDataAdapter da =
new OracleDataAdapter(cde, ConStr);
OracleConnection con = da.SelectCommand.Connection;
con.Open();
da.SelectCommand.ExecuteReader();
DataSet ds =
new DataSet();
da.Fill(ds,"SMS_MO"); //Erreur ICI
//Traitement
con.Close();
//Ferme la connexion
}
catch
(Exception e)
{
Console.WriteLine(e.Message);
}
} HELP HELP HELP
>> NiCoMpX <<
A voir également:
Ora-01000: nombre maximum de curseurs ouverts dépassé
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 10 août 2006 à 14:56
hum... en même temps, c'est pas très "optimisé" comme code... tu passes plus de temps à ouvrir et fermer ta connexion qu'à récupérer les données !
string cde = "SELECT * FROM SMS_MO";
OracleDataAdapter da =
new OracleDataAdapter(cde, ConStr);
OracleConnection con = da.SelectCommand.Connection;
con.Open();
try {
while()
{
da.SelectCommand.ExecuteReader();
DataSet ds =
new DataSet();
da.Fill(ds,"SMS_MO"); //Erreur ICI
// Insert ici une pause... sinon t'es pas prêt de bosser ;)
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 10 août 2006 à 15:15
en fait, ton code comporte plusieurs problèmes...
1. je ne suis pas sur que ta base de données (et ton DBA ;) ) va apprécier longtemps que tu lui demandes 100 fois par secondes la même requête ! C'est pour ça que mettre une pause de 1 seconde entre chaque tour ne me semble pas "mortel"
2. j'ai un gros doute quant à l'utilise de ton objet "con"... puisque le DataAdapter gère tout seul l'ouverture et la fermeture de la connexion. (pareil pour le ExecuteReader...)
3. L'utilisation des boucles infinies est très dangeureuse et pénalise les performances.
Mes conseils :
1. à la place de la boucle infinie, utilise plutot un timer... c'est plus "fiable" et surtout ca évite de bloquer ton prog et la machine qui l'exécute.
2. Soit tu utilises le mode connecté (donc Connection + Reader) soit tu utilises le mode déconnecté (DataSet + DataAdapter)... en aucun cas, tu fais un mix des 2 !