/// <summary>
 /// Libère les ressources de lecture de la connexion utilisée
 /// </summary>
 public void Dispose()
 {
     if (m_ConnexionUtilisee != null)
     {
         m_ConnexionUtilisee.TerminerLecture(m_ConnexionMaitre);
     }
 }
 /// <summary>
 /// Permet de récupérer le premier enregistrement résultant d'une requête de consultation
 /// </summary>
 /// <param name="Requete">Requête SQL à exécuter (doit être de type SELECT ou SHOW)</param>
 /// <param name="Valeurs">Valeurs des parties variables</param>
 /// <returns>Enregistrement si possible, sinon null</returns>
 public IEnregistrement Consulter(string Requete, params object[] Valeurs)
 {
     for (int NombreEchecs = 0; NombreEchecs < 2; NombreEchecs++)
     {
         MyDB ConnexionUtilisee = null;
         try
         {
             // Vérification de l'état théorique de la connexion
             if (!EstConnecte)
             {
                 throw new Exception("Pas de connexion établie au serveur MySql");
             }
             // Vérification qu'il s'agit bien d'une requête de consultation
             if (!EstRequeteConsultation(Requete))
             {
                 throw new Exception("Une requête d'action ne peut pas faire l'objet de la méthode MyDB.Consulter()");
             }
             // Création de la commande SQL
             MySqlCommand Commande = CreerCommande(Requete, Valeurs);
             if (!DebuterLecture(Commande, out ConnexionUtilisee))
             {
                 throw new Exception("Aucun objet de lecture n'a pu être créé");
             }
             // Préparation de l'objet représentant l'enregistrement courant
             Enregistrement Enregistrement = new Enregistrement(ConnexionUtilisee.m_Lecteur);
             // Tentative de lecture du premier enregistrement
             if (ConnexionUtilisee.m_Lecteur.Read())
             {
                 // Transfert des valeurs de l'enregistrement courant dans le dictionnaire le représentant
                 Enregistrement.ChargerValeurs(0, ConnexionUtilisee.m_Lecteur);
                 // Terminaison de la lecture avec libération des ressources associées
                 if (ConnexionUtilisee != null)
                 {
                     ConnexionUtilisee.TerminerLecture(this);
                 }
                 // Retour du premier enregistrement lu
                 return(Enregistrement);
             }
             // Terminaison de la lecture avec libération des ressources associées
             if (ConnexionUtilisee != null)
             {
                 ConnexionUtilisee.TerminerLecture(this);
             }
         }
         catch (Exception Erreur)
         {
             /*
              * System.Diagnostics.Debug.WriteLine(string.Format(
              *  "\nMyDB.Consulter({0}, {1}) a échoué (version de récupération du premier enregistrement) :\n{2}\n",
              *  Requete,
              *  string.Join("", Valeurs.Select(Valeur => string.Format(", {0}", Valeur))),
              *  Erreur.Message));
              */
             // Terminaison de la lecture avec libération des ressources associées
             if (ConnexionUtilisee != null)
             {
                 ConnexionUtilisee.TerminerLecture(this);
             }
             // Test de l'état de connexion
             if ((EtatConnexionConnu != EtatConnexion.Perdu) && (!EstConnecte || TesterConnexion()))
             {
                 if (SurErreur != null)
                 {
                     SurErreur(this, MethodeExecutantRequeteSql.Enumerer, Requete, Valeurs, Erreur.Message);
                 }
                 break;
             }
             // En cas de perte de connexion, on tente une fois de se reconnecter
             if (!SeConnecter())
             {
                 if (SurErreur != null)
                 {
                     SurErreur(this, MethodeExecutantRequeteSql.Enumerer, Requete, Valeurs, Erreur.Message);
                 }
                 break;
             }
             // En cas de réussite de la re-connexion, on boucle une seconde fois sur la tentative d'exécution de cette lecture
         }
     }
     // Retour d'un enregistrement "null" afin de représenter l'absence d'enregistrement
     return(null);
 }