2010-06-10 3 views
0

Je dois trouver un moyen de le faire en C#, si possible ...C# mysqlreader sur la même erreur de connexion

Je dois boucle sur ma liste de dossiers (table mysql), et pour chaque dossier que j'instancier je dois faire Une autre requête, mais quand je fais cela, il dit: "Il y a déjà un DataReader ouvert associé à cette connexion" et je suis déjà dans une boucle mysqlreader.

Notez que j'ai trop simplifié le code pour vous montrer, le fait est que je dois faire des requêtes dans une boucle mysqlreader, et cela semble être impossible car ils sont sur la même connexion?

MySqlConnection cnx = new MySqlConnection(connexionString); 

     cnx.Open(); 

     MySqlCommand command= new MySqlCommand("SELECT * FROM folder WHERE folder_id = " + id, cnx); 

     MySqlDataReader reader= commande.ExecuteReader(); 

     while (reader.Read()) 
     { 
      this.folderList[this.folderList.Length] = 
        new CFolder(reader.GetInt32"folder_id"),                    cnx); 
     } 
     reader.Close(); 

     cnx.Close(); 
+0

L'utilisation de la connexion interne réside-t-elle dans le fait que "new CFolder (int)" appelle cette même fonction? – Reddog

Répondre

1

Eh bien vous pouvez obtenir toutes les données vers le bas localy d'abord, peut-être un tableau de données ou d'une autre collection, puis boucle à travers que vous faire deuxième appels SQL à l'intérieur de cette boucle. Cependant, faire un appel sql à l'intérieur d'une boucle n'est généralement pas un bon chemin à suivre. Y at-il de toute façon vous pouvez obtenir toutes vos données dans le premier appel?

0

Vous avez un couple d'options ici, que ce soit fonctionnerait très bien:

  1. Créer une nouvelle connexion et utiliser la deuxième connexion pour le second lecteur. Effectuer une itération sur les résultats du premier lecteur de données, stocker les valeurs folder_id dans une collection, puis fermer le lecteur et en ouvrir un nouveau.

0

Lorsque vous avez un DataReader ouvert, vous ne pouvez pas utiliser cette connexion pour toutes les autres choses. Vous devez soit fermer le lecteur ouvert en premier, soit ouvrir une nouvelle connexion. Les connexions aux bases de données sont des ressources précieuses. Je ne recommande donc pas d'ouvrir de nouvelles connexions dans une boucle, sauf si cela est absolument nécessaire.

Je n'ai pas tout à fait obtenu le code que vous avez envoyé si .. La connexion n'est pas utilisée pour autre chose qu'un lecteur de données là.