Maison >base de données >tutoriel mysql >Pourquoi est-ce que j'obtiens « Il existe déjà un DataReader ouvert associé à cette connexion qui doit d'abord être fermé » ?
Dépannage "Il existe déjà un DataReader ouvert associé à cette connexion qui doit être fermé en premier"
Dans votre code, vous essayez pour exécuter une autre instruction SQL ("Insert Into tblProduct_temp") alors qu'un lecteur de données est encore ouvert, conduisant à l'exception : "Il existe déjà un DataReader ouvert associé à ce Connexion qui doit être fermée en premier."
Raison :
Les connexions MySQL maintiennent un verrou exclusif sur la ressource de connexion lorsqu'un lecteur de données est ouvert. Cela empêche d'autres opérations d'accéder à la connexion jusqu'à ce que le lecteur de données soit fermé.
Solution :
Pour résoudre ce problème, vous devez fermer le lecteur de données avant d'exécuter le nouveau Instruction SQL. La méthode recommandée pour ce faire est d'utiliser une instruction using ou un bloc try-finally pour garantir que le lecteur est correctement fermé, même si une exception se produit.
Voici le code révisé utilisant une instruction using :
using (MySqlConnection myConnection = new MySqlConnection(cf.GetConnectionString())) { myConnection.Open(); using (MySqlCommand myCommand = new MySqlCommand(SQL, myConnection)) { using (MySqlDataReader myReader = myCommand.ExecuteReader()) { if (myReader.HasRows) { int i = 0; while (myReader.Read()) { if (myReader["frProductid"].ToString() == "") { strInsertSQL = "Insert Into tblProduct_temp (Productid) Values('this istest') "; using (MySqlCommand cmdInserttblProductFrance = new MySqlCommand(strInsertSQL, myConnection)) { cmdInserttblProductFrance.ExecuteNonQuery(); } } } } } } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!