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é » ?

Pourquoi est-ce que j'obtiens « Il existe déjà un DataReader ouvert associé à cette connexion qui doit d'abord être fermé » ?

Mary-Kate Olsen
Libérer: 2024-12-05 08:38:10
original
779 Les gens l'ont consulté

Why Am I Getting

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();
                        }
                    }
                }
            }
        }
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal