/// <summary>
    /// Initialisation, première étape du cycle de vie donc on en profite pour créer notre modèle seulement s'il n'existe pas dans la session
    /// Après quoi, on ne le referra pas inutilement
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Page_Init(object sender, EventArgs e)
    {
        //On ouvre pas une connexion si le modèle est déjà construit !
        //Il y a une nuance avec le postback ici car si on a frappé un problème dans le code, on aura mis le modèle à null dans la session
        //Ceci nous laisse donc une chance de le reconstruire !
        if (Session["modeleClient"] == null)
        {
            //Gestion des exception essentielle, on gère du code "dangereux"
            try
            {
                //On effectue la connexion et on l'obtient en retour
                bd = new ConnexionBD();
                OleDbConnection connection = bd.ConnectToDB(sqlDataSource1.ConnectionString);

                //On Instancie notre modèle client en lui passant la connection reçue
                modeleClient = new Modele(connection);

                //Si tout a fonctionné, on stocke notre modèle dans la session. C'est la meilleure façon car un PostBack va tout effacer ce qu'on vient de faire !
                Session["modeleClient"] = modeleClient;
            }

            catch (Exception exc)
            {
                //message d'erreur comme quoi la BD ne sera pas disponible
                modeleClient.RollbackTransaction();
                System.Diagnostics.Debug.Write(exc);
            }
        }
    }
    /// <summary>
    /// Cette méthode liste tous les Commandes de la base de données et envoie les données en construction dans la table
    /// </summary>
    public void ListerCommandes()
    {
        //Gestion des exception essentielle, on gère du code "dangereux"
        try
        {
            //On s'assure que le modèle client est disponible
            if (Session["modeleClient"] != null)
            {
                //On le récupère et on demande les enregistrements des clients selon la requête passée en paramètre
                Modele modele = (Modele)Session["modeleClient"];

                //Récupère les informations de la commande à modifier.
                OleDbDataReader readerSelectTabSelected = modele.ReadClient("SELECT Jeu.Titre, Jeu.Prix, CommandeJeu.CodeJeu, CommandeJeu.Quantité, CommandeJeu.DateCommande,CommandeJeu.IdCommande, Entrepot.Ville, Entrepot.Pays" +
                                                                            " FROM Jeu INNER JOIN (CommandeJeu INNER JOIN Entrepot ON CommandeJeu.IdEntrepot=Entrepot.IdEntrepot) ON Jeu.CodeJeu=CommandeJeu.CodeJeu " +
                                                                            "WHERE IdCommande=" + Request.QueryString["IdCommande"] + " ORDER BY CommandeJeu.DateCommande");
                //On envoie notre table en construction
                ConstruireLabelTabSelected(readerSelectTabSelected);

                //!!!!!!!!!!!!!!!!!!!!!!!!
                //CECI EST ESSENTIEL AVANT DE FAIRE UNE AUTRE REQUETE, CECI PERMETTRA UNE AUTRE
                //REQUÊTE SUR LA COMMANDE QUI A ÉTÉ OUVERTE DANS LE MODÈLE. MÊME SI C'ÉTAIT LA DERNIÈRE REQUÊTE DU LOT IL FAUT LE FAIRE !!!
                //!!!!!!!!!!!!!!!!!!!!!!!!
                readerSelectTabSelected.Close();

                //Récupère le titre et le code de touts les jeux pour les ajouter dans la liste déroulante de jeu.
                OleDbDataReader readerSelectJeu = modele.ReadClient("SELECT Titre, CodeJeu FROM Jeu");
                //On envoie notre table en construction
                ConstruireDropDownList(DropDownListJeu, readerSelectJeu, false);

                //!!!!!!!!!!!!!!!!!!!!!!!!
                //CECI EST ESSENTIEL AVANT DE FAIRE UNE AUTRE REQUETE, CECI PERMETTRA UNE AUTRE
                //REQUÊTE SUR LA COMMANDE QUI A ÉTÉ OUVERTE DANS LE MODÈLE. MÊME SI C'ÉTAIT LA DERNIÈRE REQUÊTE DU LOT IL FAUT LE FAIRE !!!
                //!!!!!!!!!!!!!!!!!!!!!!!!
                readerSelectJeu.Close();

                //Récupère la ville, le pays et Id des entrepot de touts les entrepot pour les ajouter dans la liste déroulante de jeu.
                OleDbDataReader readerSelectEntrepot = modele.ReadClient("SELECT Ville, Pays, IdEntrepot FROM Entrepot");
                //On envoie notre table en construction
                ConstruireDropDownList(DropDownListEntrepot, readerSelectEntrepot, true);

                //!!!!!!!!!!!!!!!!!!!!!!!!
                //CECI EST ESSENTIEL AVANT DE FAIRE UNE AUTRE REQUETE, CECI PERMETTRA UNE AUTRE
                //REQUÊTE SUR LA COMMANDE QUI A ÉTÉ OUVERTE DANS LE MODÈLE. MÊME SI C'ÉTAIT LA DERNIÈRE REQUÊTE DU LOT IL FAUT LE FAIRE !!!
                //!!!!!!!!!!!!!!!!!!!!!!!!
                readerSelectEntrepot.Close();
            }
        }
        catch (Exception exc)
        {
            //Si le probleme provenait de la transaction du modele, on la Rollback
            Modele modele = (Modele)Session["modeleClient"];
            modele.RollbackTransaction();
            //et on invalide le modele, il pourra être reconstruit en PostBack
            Session["modeleClient"] = null;
            System.Diagnostics.Debug.Write(exc);
        }
    }
示例#3
0
    //Fonction qui liste le jeu sélectionné dans la page précédente.
    public void ListerJeuSelectionné()
    {
        //<sspeichert>
        //On récupère en get la clé du site web.
        string codeJeu = Request.QueryString["codeJeu"];

        //</sspeichert>
        //Gestion des exceptions essentielle, on gère du code "dangereux"
        try
        {
            //On s'assure que le modèle client est disponible
            if (Session["modeleClient"] != null)
            {
                //On le récupère et on demande les enregistrements des clients selon la requête passée en paramètre
                Modele modele = (Modele)Session["modeleClient"];


                //<sspeichert>



                OleDbDataReader readerSelect = modele.ReadClient("SELECT Jeu.CodeJeu, Jeu.Titre, Jeu.Prix, Jeu.Plateforme, TypeJeu.Genre, Jeu.CodeCompagnie, Jeu.Description, Jeu.Image FROM Jeu INNER JOIN TypeJeu ON Jeu.IdGenre = TypeJeu.IdGenre WHERE Jeu.CodeJeu ='" + codeJeu + "'");

                //Pendant que le reader est en train d'être lu, on entre
                while (readerSelect.Read())
                {
                    if (codeJeu == readerSelect[0].ToString())
                    {
                        //ImageJeu.ImageUrl = "~/img/miniatures/" + readerSelect["Image"].ToString();
                        LabelTitreDuJeu.Text  = "Titre du jeu :" + readerSelect["Titre"].ToString();
                        LabelGenre.Text       = "Genre :" + readerSelect["Genre"].ToString();
                        LabelPlateforme.Text  = "Plateforme :" + readerSelect["Plateforme"].ToString();
                        LabelPrix.Text        = "Prix :" + readerSelect["Prix"].ToString();
                        LabelDeveloppeur.Text = "Developpeur :" + readerSelect["CodeCompagnie"].ToString();
                        LabelSynopsis.Text    = "Synopsis :" + readerSelect["Description"].ToString();
                    }
                }

                //!!!!!!!!!!!!!!!!!!!!!!!!
                //CECI EST ESSENTIEL AVANT DE FAIRE UNE AUTRE REQUETE, CECI PERMETTRA UNE AUTRE
                //REQUÊTE SUR LA COMMANDE QUI A ÉTÉ OUVERTE DANS LE MODÈLE. MÊME SI C'ÉTAIT LA DERNIÈRE REQUÊTE DU LOT IL FAUT LE FAIRE !!!
                //!!!!!!!!!!!!!!!!!!!!!!!!
                readerSelect.Close();
                //<sspeichert>
            }
        }
        catch (Exception exc)
        {
            //Si le probleme provenait de la transaction du modele, on la Rollback
            Modele modele = (Modele)Session["modeleClient"];
            modele.RollbackTransaction();
            //et on invalide le modele, il pourra être reconstruit en PostBack
            Session["modeleClient"] = null;
            System.Diagnostics.Debug.Write(exc);
        }
    }
    /// <summary>
    /// Cette méthode liste tous les clients de la base de données et envoie les données en construction dans la table
    /// </summary>
    public void ListerClients()
    {
        //Gestion des exception essentielle, on gère du code "dangereux"
        try
        {
            //On s'assure que le modèle client est disponible
            if (Session["modeleClient"] != null)
            {
                //On le récupère et on demande les enregistrements des clients selon la requête passée en paramètre
                Modele modele = (Modele)Session["modeleClient"];

                //Récupère touts les jeux de la BD et les enregistre dans le reader avec un trie en ordre Ascendant ou descendant.
                if (orderByAsc)
                {
                    OleDbDataReader readerSelect = modele.ReadClient("SELECT Jeu.Titre, Jeu.Prix, CommandeJeu.CodeJeu, CommandeJeu.Quantité, CommandeJeu.DateCommande,CommandeJeu.IdCommande, Entrepot.Ville, Entrepot.Pays" +
                                                                     " FROM Jeu INNER JOIN (CommandeJeu INNER JOIN Entrepot ON CommandeJeu.IdEntrepot=Entrepot.IdEntrepot) ON Jeu.CodeJeu=CommandeJeu.CodeJeu " +
                                                                     "ORDER BY CommandeJeu.DateCommande");
                    //On envoie notre table en construction
                    ConstruireTable(Jeux, readerSelect);

                    //!!!!!!!!!!!!!!!!!!!!!!!!
                    //CECI EST ESSENTIEL AVANT DE FAIRE UNE AUTRE REQUETE, CECI PERMETTRA UNE AUTRE
                    //REQUÊTE SUR LA COMMANDE QUI A ÉTÉ OUVERTE DANS LE MODÈLE. MÊME SI C'ÉTAIT LA DERNIÈRE REQUÊTE DU LOT IL FAUT LE FAIRE !!!
                    //!!!!!!!!!!!!!!!!!!!!!!!!
                    readerSelect.Close();
                }
                else
                {
                    OleDbDataReader readerSelect = modele.ReadClient("SELECT Jeu.Titre, Jeu.Prix, CommandeJeu.CodeJeu, CommandeJeu.Quantité, CommandeJeu.DateCommande,CommandeJeu.IdCommande, Entrepot.Ville, Entrepot.Pays" +
                                                                     " FROM Jeu INNER JOIN (CommandeJeu INNER JOIN Entrepot ON CommandeJeu.IdEntrepot=Entrepot.IdEntrepot) ON Jeu.CodeJeu=CommandeJeu.CodeJeu " +
                                                                     "ORDER BY CommandeJeu.DateCommande DESC");
                    //On envoie notre table en construction
                    ConstruireTable(Jeux, readerSelect);

                    //!!!!!!!!!!!!!!!!!!!!!!!!
                    //CECI EST ESSENTIEL AVANT DE FAIRE UNE AUTRE REQUETE, CECI PERMETTRA UNE AUTRE
                    //REQUÊTE SUR LA COMMANDE QUI A ÉTÉ OUVERTE DANS LE MODÈLE. MÊME SI C'ÉTAIT LA DERNIÈRE REQUÊTE DU LOT IL FAUT LE FAIRE !!!
                    //!!!!!!!!!!!!!!!!!!!!!!!!
                    readerSelect.Close();
                }
            }
        }
        catch (Exception exc)
        {
            //Si le probleme provenait de la transaction du modele, on la Rollback
            Modele modele = (Modele)Session["modeleClient"];
            modele.RollbackTransaction();
            //et on invalide le modele, il pourra être reconstruit en PostBack
            Session["modeleClient"] = null;
            System.Diagnostics.Debug.Write(exc);
        }
    }
    protected void ButtonEnvoyer_Click(object sender, EventArgs e)
    {
        //Gestion des exception essentielle, on gère du code "dangereux"
        try
        {
            //On s'assure que le modèle client est disponible
            if (Session["modeleClient"] != null)
            {
                //<sspeichert>

                //On le récupère et on demande les enregistrements des clients selon la requête passée en paramètre
                Modele modele = (Modele)Session["modeleClient"];
                //Si les boîtes de textes ont plus que zéro caractères
                if (TextBoxCommentaire.Text.Length > 0 && TextBoxPrenom.Text.Length > 0 && TextBoxNom.Text.Length > 0)
                {
                    //On exécute la requète
                    int rows = modele.CreateClient("INSERT INTO COMMENTAIRE (DateCreation, CommentaireEcrit, iDTypeClient, Prenom, Nom) VALUES (Now(),'" + TextBoxCommentaire.Text + "',4,'" + TextBoxPrenom.Text + "','" + TextBoxNom.Text + "')");
                    //Et on change les contrôles s'il y a au moins une ligne d'insérée dans la base de données!
                    if (rows > 0)
                    {
                        LabelValidation.ForeColor  = Color.Green;
                        LabelValidation.Text       = "Votre commentaire a été envoyé!";
                        LabelCommentaire.Visible   = false;
                        LabelNom.Visible           = false;
                        LabelPrenom.Visible        = false;
                        TextBoxCommentaire.Visible = false;
                        TextBoxNom.Visible         = false;
                        TextBoxPrenom.Visible      = false;
                        ButtonEnvoyer.Visible      = false;
                    }
                }
                else         //Sinon, un message d'erreur s'affiche, et c'est la que les validateurs s'activent.
                {
                    LabelValidation.ForeColor = Color.DarkRed;
                    LabelValidation.Text      = "D'Oh! Il y a eu un problème concernant votre connection...";
                }
                //</sspeichert>
            }
        }

        catch (Exception exc)
        {
            //Si le probleme provenait de la transaction du modele, on la Rollback
            Modele modele = (Modele)Session["modeleClient"];
            modele.RollbackTransaction();
            //et on invalide le modele, il pourra être reconstruit en PostBack
            Session["modeleClient"] = null;
            System.Diagnostics.Debug.Write(exc);
        }
    }
示例#6
0
    /// <summary>
    /// Cette méthode liste tous les jeux et les entrepots de la base de données et envoie les données en construction dans la table
    /// </summary>
    public void ListerClients()
    {
        //Gestion des exception essentielle, on gère du code "dangereux"
        try
        {
            //On s'assure que le modèle client est disponible
            if (Session["modeleClient"] != null)
            {
                //On le récupère et on demande les enregistrements des clients selon la requête passée en paramètre
                Modele modele = (Modele)Session["modeleClient"];

                //tout les jeux et leur code.
                OleDbDataReader readerSelectJeu = modele.ReadClient("SELECT Titre, CodeJeu FROM Jeu");
                //On envoie notre table en construction
                ConstruireDropDownList(DropDownListJeu, readerSelectJeu, false);

                //!!!!!!!!!!!!!!!!!!!!!!!!
                //CECI EST ESSENTIEL AVANT DE FAIRE UNE AUTRE REQUETE, CECI PERMETTRA UNE AUTRE
                //REQUÊTE SUR LA COMMANDE QUI A ÉTÉ OUVERTE DANS LE MODÈLE. MÊME SI C'ÉTAIT LA DERNIÈRE REQUÊTE DU LOT IL FAUT LE FAIRE !!!
                //!!!!!!!!!!!!!!!!!!!!!!!!
                readerSelectJeu.Close();

                //Tout les ville et les pays des entrepot.
                OleDbDataReader readerSelectEntrepot = modele.ReadClient("SELECT Ville, Pays, IdEntrepot FROM Entrepot");
                //On envoie notre table en construction
                ConstruireDropDownList(DropDownListEntrepot, readerSelectEntrepot, true);

                //!!!!!!!!!!!!!!!!!!!!!!!!
                //CECI EST ESSENTIEL AVANT DE FAIRE UNE AUTRE REQUETE, CECI PERMETTRA UNE AUTRE
                //REQUÊTE SUR LA COMMANDE QUI A ÉTÉ OUVERTE DANS LE MODÈLE. MÊME SI C'ÉTAIT LA DERNIÈRE REQUÊTE DU LOT IL FAUT LE FAIRE !!!
                //!!!!!!!!!!!!!!!!!!!!!!!!
                readerSelectEntrepot.Close();
            }
        }
        catch (Exception exc)
        {
            //Si le probleme provenait de la transaction du modele, on la Rollback
            Modele modele = (Modele)Session["modeleClient"];
            modele.RollbackTransaction();
            //et on invalide le modele, il pourra être reconstruit en PostBack
            Session["modeleClient"] = null;
            System.Diagnostics.Debug.Write(exc);
        }
    }
    /// <summary>
    //Cette méthode effectue supprime une entrée, mais "en memoire" dans la BD. Pour un impact réel dans le fichier de base de données
    //Il ne faut pas oublier d'appler le CommitChanges au déchargement de la page
    /// </summary>
    public void SupprimerCommande()
    {
        //Gestion des exception essentielle, on gère du code "dangereux"
        try
        {
            //On s'assure que le modèle client est disponible
            if (Session["modeleClient"] != null)
            {
                //On le récupère et on demande les enregistrements des clients selon la requête passée en paramètre
                Modele modele = (Modele)Session["modeleClient"];

                //On peut maintenant faire notre requete
                //Supprime la commande selectionnée dans le formulaire Administration.aspx
                int numRows = modele.CreateClient("DELETE FROM CommandeJeu WHERE IdCommande= " + Request.QueryString["IdCommande"]);

                if (numRows >= 1)
                {
                    //message de succès à l'écran
                    PanelCommande.Enabled  = false;
                    LabelConfirmation.Text = "Commande supprimer.";
                }

                else
                {
                    //message d'erreur à l'écran
                    LabelConfirmation.Text = "Il y a eu une erreur avec votre commande veuillez réessayer ultérieurement ou contacter votre administrateur réseau.";
                }
            }
        }

        catch (Exception exc)
        {
            //Si le probleme provenait de la transaction du modele, on la Rollback
            Modele modele = (Modele)Session["modeleClient"];
            modele.RollbackTransaction();
            //et on invalide le modele, il pourra être reconstruit en PostBack
            Session["modeleClient"] = null;
            System.Diagnostics.Debug.Write(exc);
        }
    }
    /// <summary>
    //Cette méthode effectue une mise à jour, mais "en memoire" dans la BD. Pour un impact réel dans le fichier de base de données
    //Il ne faut pas oublier d'appler le CommitChanges au déchargement de la page
    /// </summary>
    public void MettreAJourClient()
    {
        //Gestion des exception essentielle, on gère du code "dangereux"
        try
        {
            //On s'assure que le modèle client est disponible
            if (Session["modeleClient"] != null)
            {
                //On le récupère et on demande les enregistrements des clients selon la requête passée en paramètre
                Modele modele = (Modele)Session["modeleClient"];

                //On peut maintenant faire notre requete
                //Met à jour la commande selectionnée avec les valeurs selectionnées dans les listes déroulantes.
                int numRows = modele.CreateClient("UPDATE CommandeJeu SET CodeJeu='" + DropDownListJeu.SelectedValue + "', Quantité='" + DropDownListQuantite.SelectedValue + "', IdEntrepot=" + int.Parse(DropDownListEntrepot.SelectedValue) + " WHERE IdCommande =" + int.Parse(Request.QueryString["IdCommande"]) + ";");

                if (numRows >= 1)
                {
                    //message de succès à l'écran
                    PanelCommande.Enabled  = false;
                    LabelConfirmation.Text = "Commande modifiée.";
                }

                else
                {
                    //message d'erreur à l'écran
                    LabelConfirmation.Text = "Il y a eu une erreur avec votre commande veuillez réessayer ultérieurement ou contacter votre administrateur réseau.";
                }
            }
        }

        catch (Exception exc)
        {
            //Si le probleme provenait de la transaction du modele, on la Rollback
            Modele modele = (Modele)Session["modeleClient"];
            modele.RollbackTransaction();
            //et on invalide le modele, il pourra être reconstruit en PostBack
            Session["modeleClient"] = null;
            System.Diagnostics.Debug.Write(exc);
        }
    }
    //Fonction qui liste les points de distribution.
    public void ListerPointsDeDistribution()
    {
        //Gestion des exceptions essentielle, on gère du code "dangereux"
        try
        {
            //On s'assure que le modèle client est disponible
            if (Session["modeleClient"] != null)
            {
                //On le récupère et on demande les enregistrements des clients selon la requête passée en paramètre
                Modele modele = (Modele)Session["modeleClient"];


                //La requète est exécutée
                OleDbDataReader readerSelect = modele.ReadClient("SELECT * FROM PointDistribution");


                //On envoie notre table en construction
                while (readerSelect.Read())
                {
                    DropDownListVilles.Items.Add(new ListItem(readerSelect[2].ToString(), readerSelect[0].ToString()));        //(text,value)
                }
                //!!!!!!!!!!!!!!!!!!!!!!!!
                //CECI EST ESSENTIEL AVANT DE FAIRE UNE AUTRE REQUETE, CECI PERMETTRA UNE AUTRE
                //REQUÊTE SUR LA COMMANDE QUI A ÉTÉ OUVERTE DANS LE MODÈLE. MÊME SI C'ÉTAIT LA DERNIÈRE REQUÊTE DU LOT IL FAUT LE FAIRE !!!
                //!!!!!!!!!!!!!!!!!!!!!!!!
                readerSelect.Close();
            }
        }
        catch (Exception exc)
        {
            //Si le probleme provenait de la transaction du modele, on la Rollback
            Modele modele = (Modele)Session["modeleClient"];
            modele.RollbackTransaction();
            //et on invalide le modele, il pourra être reconstruit en PostBack
            Session["modeleClient"] = null;
            System.Diagnostics.Debug.Write(exc);
        }
    }
示例#10
0
    //Fonction qui liste les jeux de la base de données.
    public void ListerJeux()
    {
        //Gestion des exceptions essentielle, on gère du code "dangereux"
        try
        {
            //On s'assure que le modèle client est disponible
            if (Session["modeleClient"] != null)
            {
                //On le récupère et on demande les enregistrements des clients selon la requête passée en paramètre
                Modele modele = (Modele)Session["modeleClient"];



                OleDbDataReader readerSelect = modele.ReadClient("SELECT Jeu.CodeJeu, Jeu.Titre, Jeu.Prix, Jeu.Plateforme, TypeJeu.Genre, Jeu.Description, Jeu.Image FROM Jeu INNER JOIN TypeJeu ON Jeu.IdGenre = TypeJeu.IdGenre");
                //OleDbDataReader readerSelectNom = modele.ReadClient("SELECT Nom FROM CLIENT");

                //On envoie notre table en construction
                ConstruireTable(TableClient, readerSelect);


                //!!!!!!!!!!!!!!!!!!!!!!!!
                //CECI EST ESSENTIEL AVANT DE FAIRE UNE AUTRE REQUETE, CECI PERMETTRA UNE AUTRE
                //REQUÊTE SUR LA COMMANDE QUI A ÉTÉ OUVERTE DANS LE MODÈLE. MÊME SI C'ÉTAIT LA DERNIÈRE REQUÊTE DU LOT IL FAUT LE FAIRE !!!
                //!!!!!!!!!!!!!!!!!!!!!!!!
                readerSelect.Close();
            }
        }
        catch (Exception exc)
        {
            //Si le probleme provenait de la transaction du modele, on la Rollback
            Modele modele = (Modele)Session["modeleClient"];
            modele.RollbackTransaction();
            //et on invalide le modele, il pourra être reconstruit en PostBack
            Session["modeleClient"] = null;
            System.Diagnostics.Debug.Write(exc);
        }
    }
示例#11
0
    //Fonction qui liste les nouveautés de la base de données.
    public void ListerNouveautes()
    {
        //Gestion des exceptions essentielle, on gère du code "dangereux"
        try
        {
            //On s'assure que le modèle client est disponible
            if (Session["modeleClient"] != null)
            {
                //On le récupère et on demande les enregistrements des clients selon la requête passée en paramètre
                Modele modele = (Modele)Session["modeleClient"];



                OleDbDataReader readerSelect = modele.ReadClient("SELECT Jeu.CodeJeu, Jeu.Titre, Jeu.Prix, Jeu.Plateforme, TypeJeu.Genre, Jeu.Description, Jeu.Image FROM Jeu INNER JOIN TypeJeu ON Jeu.IdGenre = TypeJeu.IdGenre WHERE Jeu.Nouveaute = TRUE");

                //On place les éléments dans la boite-liste.
                while (readerSelect.Read())
                {
                    ListBoxNouveautes.Items.Add(new ListItem(readerSelect[1].ToString() + " " + readerSelect[2].ToString() + " " + readerSelect[3].ToString() + " " + readerSelect[4].ToString(), readerSelect[0].ToString()));        //(text,value)
                }
                //!!!!!!!!!!!!!!!!!!!!!!!!
                //CECI EST ESSENTIEL AVANT DE FAIRE UNE AUTRE REQUETE, CECI PERMETTRA UNE AUTRE
                //REQUÊTE SUR LA COMMANDE QUI A ÉTÉ OUVERTE DANS LE MODÈLE. MÊME SI C'ÉTAIT LA DERNIÈRE REQUÊTE DU LOT IL FAUT LE FAIRE !!!
                //!!!!!!!!!!!!!!!!!!!!!!!!
                readerSelect.Close();
            }
        }
        catch (Exception exc)
        {
            //Si le probleme provenait de la transaction du modele, on la Rollback
            Modele modele = (Modele)Session["modeleClient"];
            modele.RollbackTransaction();
            //et on invalide le modele, il pourra être reconstruit en PostBack
            Session["modeleClient"] = null;
            System.Diagnostics.Debug.Write(exc);
        }
    }