/// <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); }