/// <summary>
        /// Rechercher un livre dans la liste en connaissant sa clé
        /// </summary>
        /// <param name="unCodeLivre">le codeLivre (=la clé) du livre à rechercher</param>
        /// <exception cref="Exception">Si codeLivre reçu non trouvé en collection</exception>
        /// <returns>la référence à un livre</returns>
        public static MLivres RestituerLivre(String recherche)
        {
            MLivres      unLivre = null;
            MySqlCommand cmd     = ConnexionBase.GetConnexion().CreateCommand();

            cmd.CommandText = "SELECT * FROM livres WHERE code_livre=@recherche";
            cmd.Parameters.AddWithValue("@recherche", recherche);
            MySqlDataReader reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                unLivre = new MLivres();
                // affectation des 7 lignes
                unLivre.CodeLivre = reader.GetString(0);
                unLivre.Isbn      = reader.GetString("isbn");
                unLivre.Titre     = reader.GetString("titre");
                unLivre.Categorie = reader.GetString("categorie");
                unLivre.Sortie    = reader.GetDateTime("date_sortie");
                unLivre.Auteur    = reader.GetString("auteur");
                unLivre.Editeur   = reader.GetString("editeur");
            }
            reader.Close();
            if (unLivre == null)
            {
                throw new Exception("Aucun livre pour le numéro " + recherche);
            }
            else
            {
                return(unLivre);
            }
        }
        public static MScolaires RestituerScolaire(Int32 recherche)
        {
            MScolaires   unScolaire = null;
            MySqlCommand cmd        = ConnexionBase.GetConnexion().CreateCommand();

            cmd.CommandText = "SELECT * FROM classes_scolaire WHERE code_scolaire=@recherche";
            cmd.Parameters.AddWithValue("@recherche", recherche);
            MySqlDataReader reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                unScolaire = new MScolaires();
                // affectation des 9 lignes
                unScolaire.Code          = reader.GetInt32(0);
                unScolaire.Classe        = reader.GetString("libelle");
                unScolaire.NumAdherent   = reader.GetInt32("num_adherent");
                unScolaire.Etablissement = reader.GetString("nom_ecole");
                unScolaire.CodePostal    = reader.GetString("cp");
                unScolaire.Ville         = reader.GetString("ville");
                unScolaire.Nom           = reader.GetString("nom_prof");
                unScolaire.Prenom        = reader.GetString("prenom_prof");
            }
            reader.Close();
            if (unScolaire == null)
            {
                throw new Exception("Aucun scolaire pour le numéro " + recherche);
            }
            else
            {
                return(unScolaire);
            }
        }
        /// <summary>
        /// Rechercher une personne dans la liste en connaissant sa clé
        /// </summary>
        /// <param name="unNumPersonne">le numéro (=la clé) de la personne à rechercher</param>
        /// <returns>la référence à la personne (ou bien lève une erreur)</returns>
        public static MPersonnes RestituerPersonne(Int32 recherche)
        {
            MPersonnes   unePersonne = null;
            MySqlCommand cmd         = ConnexionBase.GetConnexion().CreateCommand();

            cmd.CommandText = "SELECT * FROM personnes WHERE num_personne = @recherche";
            cmd.Parameters.AddWithValue("@recherche", recherche);
            MySqlDataReader reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                unePersonne = new MPersonnes();
                // affectation des 10 lignes
                unePersonne.NumPersonne = reader.GetInt32(0);
                unePersonne.Nom         = reader.GetString("nom");
                unePersonne.Prenom      = reader.GetString("prenom");
                unePersonne.Naissance   = reader.GetDateTime("date_naissance");
                unePersonne.Adresse1    = reader.GetString("adresse1");
                unePersonne.Email       = reader.GetString("email");
                unePersonne.Telephone   = reader.GetString("telephone");
                unePersonne.CodePostal  = reader.GetString("cp");
                unePersonne.Ville       = reader.GetString("ville");
                unePersonne.NumAdherent = reader.GetInt32("num_adherent");
            }
            reader.Close();
            if (unePersonne == null)
            {
                throw new Exception("Aucune personne pour le numéro " + recherche);
            }
            else
            {
                return(unePersonne);
            }
        }
        /// <summary>
        /// générer et retourner une datatable qui liste les numéros, noms, prénoms et dates d"inscription
        /// de toutes les personnes de la collection
        /// </summary>
        /// <returns></returns>
        public static DataTable ListerPersonnes(String recherche)
        {
            DataTable tablePersonnes = new DataTable();

            // ajoute à la datatable 4 colonnes personnalisées pour les personnes
            tablePersonnes.Columns.Add(new DataColumn("Num personne", typeof(System.Int32)));
            tablePersonnes.Columns.Add(new DataColumn("Nom", typeof(System.String)));
            tablePersonnes.Columns.Add(new DataColumn("Prénom", typeof(System.String)));

            MySqlCommand cmd = ConnexionBase.GetConnexion().CreateCommand();

            cmd.CommandText = "SELECT * FROM personnes WHERE nom like @recherche";
            cmd.Parameters.AddWithValue("@recherche", recherche + '%');
            MySqlDataReader reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                DataRow dr;
                dr = tablePersonnes.NewRow();
                // affectation des 3 lignes
                dr[0] = reader.GetString(0);
                dr[1] = reader.GetString(1);
                dr[2] = reader.GetString(2);
                // ajoute les lignes à la datatable
                tablePersonnes.Rows.Add(dr);
            }
            reader.Close();

            // fin de la boucle de remplissage de la datatable
            // retourne la référence à la datatable
            return(tablePersonnes);
        }
        /// <summary>
        /// méthode pour supprimer une personne dans l'application ainsi que dans la base de données
        /// </summary>
        /// <param name="num"></param>
        public static void DeletePersonne(Int32 numero)
        {
            MySqlCommand cmd = ConnexionBase.GetConnexion().CreateCommand();

            cmd.CommandText = "DELETE FROM personnes WHERE num_personne=@numPersonne";

            cmd.Parameters.AddWithValue("@numPersonne", numero);
            cmd.ExecuteNonQuery();
        }
        public static void DeleteScolaire(Int32 code)
        {
            MySqlCommand cmd = ConnexionBase.GetConnexion().CreateCommand();

            cmd.CommandText = "DELETE FROM classes_scolaire WHERE code_scolaire=@codeScolaire";

            cmd.Parameters.AddWithValue("@codeScolaire", code);
            cmd.ExecuteNonQuery();
        }
        /// <summary>
        /// méthode pour supprimer un livre dans l'application ainsi que dans la base de données
        /// </summary>
        /// <param name="num"></param>
        public static void DeleteLivre(String code)
        {
            MySqlCommand cmd = ConnexionBase.GetConnexion().CreateCommand();

            cmd.CommandText = "DELETE FROM livres WHERE code_livre=@CodeLivre";

            cmd.Parameters.AddWithValue("@CodeLivre", code);
            cmd.ExecuteNonQuery();
        }
        public static void DeleteAdherent(Int32 numero)
        {
            MySqlCommand cmd = ConnexionBase.GetConnexion().CreateCommand();

            cmd.CommandText = "DELETE FROM adherents WHERE num_adherent=@numAdherent";

            cmd.Parameters.AddWithValue("@numAdherent", numero);
            cmd.ExecuteNonQuery();
        }
        /// <summary>
        /// méthode pour mettre à jour le livre dans l'application et également dans la base de données
        /// </summary>
        /// <param name="ad"></param>
        public static void UpdateLivre(MLivres lvr)
        {
            MySqlCommand cmd = ConnexionBase.GetConnexion().CreateCommand();

            cmd.CommandText = "UPDATE livres SET isbn=@Isbn, editeur=@Editeur WHERE code_livre=@CodeLivre";

            cmd.Parameters.AddWithValue("@Titre", lvr.Titre);
            cmd.Parameters.AddWithValue("@Isbn", lvr.Isbn);
            cmd.Parameters.AddWithValue("@Editeur", lvr.Isbn);
            cmd.Parameters.AddWithValue("@CodeLivre", lvr.Isbn);
            cmd.ExecuteNonQuery();
        }
        public static void UpdateCotisation(MAdherents adh)
        {
            // crée la commande sql
            MySqlCommand cmd = ConnexionBase.GetConnexion().CreateCommand();

            cmd.CommandText = "UPDATE adherents SET date_cotisation=@dateCotisation WHERE num_adherent=@numAdherent";

            cmd.Parameters.AddWithValue("@numAdherent", adh.numAdherent);
            cmd.Parameters.AddWithValue("@dateCotisation", adh.dateCotisation);
            // exécute la requête
            cmd.ExecuteNonQuery();
        }
        public static void UpdateScolaire(MScolaires sco)
        {
            MySqlCommand cmd = ConnexionBase.GetConnexion().CreateCommand();

            cmd.CommandText = "UPDATE classes_scolaire SET libelle=@libelle, nom_prof=@NomProf, prenom_prof=@PrenomProf " +
                              "WHERE num_adherent=@NumAdherent";

            cmd.Parameters.AddWithValue("@libelle", sco.Classe);
            cmd.Parameters.AddWithValue("@NomProf", sco.Nom);
            cmd.Parameters.AddWithValue("@PrenomProf", sco.Prenom);
            cmd.ExecuteNonQuery();
        }
        public static void InsertAdherent(MAdherents adh)
        {
            // crée la commande sql
            MySqlCommand cmd = ConnexionBase.GetConnexion().CreateCommand();

            cmd.CommandText = "INSERT INTO adherents(num_adherent, date_inscription, date_cotisation) " +
                              "VALUES (@numAdherent, @dateInscription, @dateCotisation)";

            cmd.Parameters.AddWithValue("@numAdherent", adh.numAdherent);
            cmd.Parameters.AddWithValue("@dateInscription", adh.dateInscription);
            cmd.Parameters.AddWithValue("@dateCotisation", adh.dateCotisation);
            // exécute la requête
            cmd.ExecuteNonQuery();
        }
        /// <summary>
        /// méthode pour mettre à jour la personne dans l'application et également dans la base de données
        /// </summary>
        /// <param name="pers"></param>
        public static void UpdatePersonne(MPersonnes pers)
        {
            MySqlCommand cmd = ConnexionBase.GetConnexion().CreateCommand();

            cmd.CommandText = "UPDATE personnes SET nom=@nom, adresse1=@adresse, email=@email, telephone=@telephone, cp=@cp, ville=@ville " +
                              "WHERE num_personne=@numPersonne";

            cmd.Parameters.AddWithValue("@nom", pers.Nom);
            cmd.Parameters.AddWithValue("@adresse", pers.Adresse1);
            cmd.Parameters.AddWithValue("@email", pers.Email);
            cmd.Parameters.AddWithValue("@telephone", pers.Telephone);
            cmd.Parameters.AddWithValue("@cp", pers.CodePostal);
            cmd.Parameters.AddWithValue("@ville", pers.Ville);
            cmd.Parameters.AddWithValue("@numPersonne", pers.NumPersonne);
            cmd.ExecuteNonQuery();
        }
        public static long LastInsertId()
        {
            MySqlCommand cmd = ConnexionBase.GetConnexion().CreateCommand();

            cmd.CommandText = "SELECT last_insert_id()";

            long        id     = 0;
            IDataReader reader = cmd.ExecuteReader();

            if (reader != null && reader.Read())
            {
                id = reader.GetInt64(0);
            }
            reader.Close();
            return(id);
        }
        /// <summary>
        /// méthode pour insérer un livre dans l'application ainsi que dans la base de données
        /// </summary>
        /// <param name="lvr"></param>
        public static void InsertLivre(MLivres lvr)
        {
            // crée la commande sql
            MySqlCommand cmd = ConnexionBase.GetConnexion().CreateCommand();

            cmd.CommandText = "INSERT INTO livres(code_livre, isbn, titre, categorie, date_sortie, auteur, editeur)" +
                              "VALUES (@codeLivre, @isbn, @titre, @categorie, @dateSortie, @auteur, @editeur)";
            // exécute la commande
            cmd.Parameters.AddWithValue("@codeLivre", lvr.CodeLivre);
            cmd.Parameters.AddWithValue("@isbn", lvr.Isbn);
            cmd.Parameters.AddWithValue("@titre", lvr.Titre);
            cmd.Parameters.AddWithValue("@categorie", lvr.Categorie);
            cmd.Parameters.AddWithValue("@dateSortie", lvr.Sortie);
            cmd.Parameters.AddWithValue("@auteur", lvr.Auteur);
            cmd.Parameters.AddWithValue("@editeur", lvr.Editeur);
            // exécute la requête
            cmd.ExecuteNonQuery();
        }
        public static void InsertScolaire(MScolaires sco)
        {
            // crée la commande sql
            MySqlCommand cmd = ConnexionBase.GetConnexion().CreateCommand();

            cmd.CommandText = "INSERT INTO classes_scolaire(code_scolaire, libelle, num_adherent, nom_ecole, cp, ville, nom_prof, prenom_prof) " +
                              "VALUES (@codeScolaire, @libelle, @numAdherent, @nomEcole, @cp, @ville, @nomProf, @prenomProf)";

            cmd.Parameters.AddWithValue("@codeScolaire", sco.Code);
            cmd.Parameters.AddWithValue("@libelle", sco.Classe);
            cmd.Parameters.AddWithValue("@numAdherent", sco.NumAdherent);
            cmd.Parameters.AddWithValue("@nomEcole", sco.Etablissement);
            cmd.Parameters.AddWithValue("@cp", sco.CodePostal);
            cmd.Parameters.AddWithValue("@ville", sco.Ville);
            cmd.Parameters.AddWithValue("@nomProf", sco.Nom);
            cmd.Parameters.AddWithValue("@prenomProf", sco.Prenom);
            // exécute la requête
            cmd.ExecuteNonQuery();
        }
        public static MAdherents ChercherAdherent(Int32 num)
        {
            MAdherents   adh = null;
            MySqlCommand cmd = ConnexionBase.GetConnexion().CreateCommand();

            cmd.CommandText = "SELECT * from adherents where num_adherent=@num";
            cmd.Parameters.AddWithValue("@num", num);
            MySqlDataReader reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                adh = new MAdherents();

                adh.dateCotisation  = reader.GetDateTime("date_cotisation");
                adh.dateInscription = reader.GetDateTime("date_inscription");
            }
            reader.Close();
            return(adh);
        }
        /// <summary>
        /// méthode pour insérer une personne dans l'application ainsi que dans la base de données
        /// </summary>
        /// <param name="ad"></param>
        public static void InsertPersonne(MPersonnes ad)
        {
            // crée la commande sql
            MySqlCommand cmd = ConnexionBase.GetConnexion().CreateCommand();

            cmd.CommandText = "INSERT INTO personnes(num_personne, num_adherent, nom, prenom, date_naissance, adresse1, email, telephone, cp, ville) " +
                              "VALUES (@NumPersonne, @NumAdherent, @nom, @prenom, @dateNaissance, @adresse1, @email, @telephone, @cp, @ville)";

            cmd.Parameters.AddWithValue("@numAdherent", ad.NumAdherent);
            cmd.Parameters.AddWithValue("@numPersonne", ad.NumPersonne);
            cmd.Parameters.AddWithValue("@nom", ad.Nom);
            cmd.Parameters.AddWithValue("@prenom", ad.Prenom);
            cmd.Parameters.AddWithValue("@dateNaissance", ad.Naissance);
            cmd.Parameters.AddWithValue("@adresse1", ad.Adresse1);
            cmd.Parameters.AddWithValue("@email", ad.Email);
            cmd.Parameters.AddWithValue("@telephone", ad.Telephone);
            cmd.Parameters.AddWithValue("@cp", ad.CodePostal);
            cmd.Parameters.AddWithValue("@ville", ad.Ville);
            // exécute la requête
            cmd.ExecuteNonQuery();
        }