/// <summary>
        /// Fonction qui retourne un utilisateur.
        /// </summary>
        /// <param name="query">Requête à effectuer sur la BD</param>
        /// <returns>Un utilisateur avec ses decks et ses cartes.</returns>
        private static Utilisateur Retrieve(string query)
        {
            Utilisateur resultat = null;
            DataSet     dsResultat;
            DataTable   dtResultat;
            DataRow     drResultat;

            ConnectionBD = new MySqlConnexion();

            dsResultat = ConnectionBD.Query(query);
            dtResultat = dsResultat.Tables[0];
            if (dtResultat.Rows.Count > 0)
            {
                drResultat = dtResultat.Rows[0];

                resultat = new Utilisateur((int)drResultat["idUtilisateur"]
                                           , (string)drResultat["nom"]
                                           , (string)drResultat["courriel"]
                                           , (int)drResultat["idNiveau"]
                                           , (string)drResultat["motDePasse"]
                                           , (string)drResultat["salt"]
                                           );

                // On va chercher les cartes
                resultat.ExemplairesUtilisateurs = MySqlCarteService.RetrieveExemplairesUser((int)drResultat["idUtilisateur"]);
                // On va chercher les decks
                resultat.DecksUtilisateurs = MySqlDeckService.RetrieveAllUserDeck((int)drResultat["idUtilisateur"]);
            }
            return(resultat);
        }
        /// <summary>
        /// Fonction qui retourne tous les effets.
        /// </summary>
        /// <returns>Liste de tous les effets</returns>
        public static List <Effet> RetrieveAll()
        {
            List <Effet> lstResultat = new List <Effet>();
            DataSet      dsResultat;
            DataTable    dtResultat;


            ConnectionBD = new MySqlConnexion();

            dsResultat = ConnectionBD.Query("SELECT * FROM Effets");
            dtResultat = dsResultat.Tables[0];

            foreach (DataRow dr in dtResultat.Rows)
            {
                if ((int)dr["champEffetF"] != 99)
                {
                    lstResultat.Add(new Gain((string)dr["typeEffet"]
                                             , (int)dr["champEffetA"]
                                             , (int)dr["champEffetB"]
                                             , (int)dr["champEffetC"]
                                             , (int)dr["champEffetD"]
                                             , (int)dr["champEffetE"]
                                             , (int)dr["champEffetF"]
                                             )
                                    );
                }
                else if ((int)dr["champEffetC"] != 99)
                {
                    lstResultat.Add(new Impact((string)dr["typeEffet"]
                                               , (int)dr["champEffetA"]
                                               , (int)dr["champEffetB"]
                                               , (int)dr["champEffetC"]
                                               )
                                    );
                }
                else if ((int)dr["champEffetB"] != 99)
                {
                    lstResultat.Add(new Recyclage((string)dr["typeEffet"]
                                                  , (int)dr["champEffetA"]
                                                  , (int)dr["champEffetB"]
                                                  )
                                    );
                }
                else if ((int)dr["champEffetA"] != 99)
                {
                    lstResultat.Add(new Radiation((string)dr["typeEffet"]
                                                  , (int)dr["champEffetA"]
                                                  )
                                    );
                }
                else
                {
                    lstResultat.Add(new Effet((string)dr["typeEffet"]));
                }
            }
            return(lstResultat);
        }
        /// <summary>
        /// Fonction qui retourne un Effet.
        /// </summary>
        /// <param name="query">Requête à effectuer sur la BD</param>
        /// <returns>Un Effet</returns>
        private static Effet Retrieve(string query)
        {
            Effet     resultat;
            DataSet   dsResultat;
            DataTable dtResultat;
            DataRow   drResultat;

            ConnectionBD = new MySqlConnexion();

            dsResultat = ConnectionBD.Query(query);
            dtResultat = dsResultat.Tables[0];
            drResultat = dtResultat.Rows[0];


            if ((int)drResultat["champEffetF"] != 99)
            {
                resultat = new Gain((string)drResultat["typeEffet"]
                                    , (int)drResultat["champEffetA"]
                                    , (int)drResultat["champEffetB"]
                                    , (int)drResultat["champEffetC"]
                                    , (int)drResultat["champEffetD"]
                                    , (int)drResultat["champEffetE"]
                                    , (int)drResultat["champEffetF"]
                                    );
            }
            else if ((int)drResultat["champEffetC"] != 99)
            {
                resultat = new Impact((string)drResultat["typeEffet"]
                                      , (int)drResultat["champEffetA"]
                                      , (int)drResultat["champEffetB"]
                                      , (int)drResultat["champEffetC"]
                                      );
            }
            else if ((int)drResultat["champEffetB"] != 99)
            {
                resultat = new Recyclage((string)drResultat["typeEffet"]
                                         , (int)drResultat["champEffetA"]
                                         , (int)drResultat["champEffetB"]
                                         );
            }
            else if ((int)drResultat["champEffetA"] != 99)
            {
                resultat = new Radiation((string)drResultat["typeEffet"]
                                         , (int)drResultat["champEffetA"]
                                         );
            }
            else
            {
                resultat = new Effet((string)drResultat["typeEffet"]);
            }

            return(resultat);
        }
        /// <summary>
        /// Fonction qui retourne toutes les cartes.
        /// </summary>
        /// <returns>Liste de toutes les cartes avec leurs effets.</returns>
        private static List <Carte> RetrieveAll(string query)
        {
            List <Carte> lstResultat = new List <Carte>();
            DataSet      dsResultat;
            DataTable    dtResultat;

            ConnectionBD = new MySqlConnexion();

            dsResultat = ConnectionBD.Query(query);
            dtResultat = dsResultat.Tables[0];

            foreach (DataRow dr in dtResultat.Rows)
            {
                Effet effetCarte = null;
                if (dr["idEffet"] != DBNull.Value)
                {
                    effetCarte = MySqlEffetService.RetrieveById((int)dr["idEffet"]);
                }
                if (dr["typeUnite"] != DBNull.Value) // TODO: vérifié si le if fonctionne sinon changé pour "null"
                {
                    lstResultat.Add(new Unite((int)dr["idCarte"]
                                              , (string)dr["nom"]
                                              , effetCarte
                                              , new Ressource((int)dr["coutCharronite"], (int)dr["coutBarilNucleaire"], (int)dr["coutAlainDollars"])
                                              , (int)dr["pointsAttaque"]
                                              , (int)dr["pointsDefense"]
                                              )
                                    );
                }
                else if (dr["pointsDefense"] != DBNull.Value) // TODO: vérifié si le if fonctionne sinon changé pour "null"
                {
                    lstResultat.Add(new Batiment((int)dr["idCarte"]
                                                 , (string)dr["nom"]
                                                 , effetCarte
                                                 , new Ressource((int)dr["coutCharronite"], (int)dr["coutBarilNucleaire"], (int)dr["coutAlainDollars"])
                                                 , (int)dr["pointsDefense"]
                                                 )
                                    );
                }
                else
                {
                    lstResultat.Add(new Gadget((int)dr["idCarte"]
                                               , (string)dr["nom"]
                                               , effetCarte
                                               , new Ressource((int)dr["coutCharronite"], (int)dr["coutBarilNucleaire"], (int)dr["coutAlainDollars"])
                                               )
                                    );
                }
            }
            return(lstResultat);
        }
        /// <summary>
        /// Fonction qui va chercher en BD les exemplaires selon la requête voulue
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        private static List <Exemplaire> RetrieveExemplaires(string query)
        {
            List <Exemplaire> lstResultat = new List <Exemplaire>();
            Carte             laCarte     = null;
            DataSet           dsResultat;
            DataTable         dtResultat;

            ConnectionBD = new MySqlConnexion();

            dsResultat = ConnectionBD.Query(query);
            dtResultat = dsResultat.Tables[0];

            foreach (DataRow dr in dtResultat.Rows)
            {
                laCarte = MySqlCarteService.RetrieveById((int)dr["idCarte"]);
                lstResultat.Add(new Exemplaire(laCarte, (int)dr["quantite"], (int)dr["idExemplaire"]));
            }

            return(lstResultat);
        }
        public static List <Utilisateur> RetrieveAmis(int pIdUtilisateur)
        {
            List <Utilisateur> lstResultat = new List <Utilisateur>();
            DataSet            dsResultat;
            DataTable          dtResultat;

            ConnectionBD = new MySqlConnexion();

            StringBuilder query = new StringBuilder();

            query.Append("SELECT idUtilisateurAmi FROM Amis WHERE idUtilisateurProprietaire = ").Append(pIdUtilisateur);

            dsResultat = ConnectionBD.Query(query.ToString());
            dtResultat = dsResultat.Tables[0];

            foreach (DataRow dr in dtResultat.Rows)
            {
                lstResultat.Add(RetrieveById((int)dr["idUtilisateurAmi"]));
            }

            return(lstResultat);
        }
        /// <summary>
        /// Fonction qui retourne un deck.
        /// </summary>
        /// <param name="query">Requête à effectuer sur la BD</param>
        /// <returns>Une carte avec son effet.</returns>
        private static Deck Retrieve(string query)
        {
            Deck      resultat = null;
            DataSet   dsResultat;
            DataTable dtResultat;
            DataRow   drResultat;

            ConnectionBD = new MySqlConnexion();

            dsResultat = ConnectionBD.Query(query);
            dtResultat = dsResultat.Tables[0];
            drResultat = dtResultat.Rows[0];

            resultat = new Deck((int)drResultat["idDeck"]
                                , (string)drResultat["nom"]
                                , (bool)drResultat["estChoisi"]
                                );
            //On va chercher ses cartes avec le id.
            resultat.CartesDuDeck = MySqlCarteService.RetrieveAllDeckCard((int)drResultat["idDeck"]);

            return(resultat);
        }
        private static List <Deck> RetrieveAllDeck(string query)
        {
            List <Deck> lstResultat = new List <Deck>();
            DataSet     dsResultat;
            DataTable   dtResultat;

            ConnectionBD = new MySqlConnexion();

            dsResultat = ConnectionBD.Query(query);
            dtResultat = dsResultat.Tables[0];

            foreach (DataRow dr in dtResultat.Rows)
            {
                Deck deckPourAjouter = new Deck((int)dr["idDeck"]
                                                , (string)dr["nom"]
                                                , (bool)dr["estChoisi"]
                                                );
                deckPourAjouter.CartesDuDeck = MySqlCarteService.RetrieveAllDeckCard((int)dr["idDeck"]);
                lstResultat.Add(deckPourAjouter);
            }

            return(lstResultat);
        }
        /// <summary>
        /// Fonction qui retourne tous les utilisateurs.
        /// </summary>
        /// <returns>Liste de tous les utilisateurs sans leur decks et leur cartes.</returns>
        public static List <Utilisateur> RetrieveAll()
        {
            //List<Carte>
            //List<Deck>
            List <Utilisateur> lstResultat = new List <Utilisateur>();
            DataSet            dsResultat;
            DataTable          dtResultat;

            ConnectionBD = new MySqlConnexion();

            dsResultat = ConnectionBD.Query("SELECT * FROM Utilisateurs");
            dtResultat = dsResultat.Tables[0];

            foreach (DataRow dr in dtResultat.Rows)
            {
                lstResultat.Add(new Utilisateur((int)dr["idUtilisateur"]
                                                , (string)dr["nom"]
                                                , (string)dr["courriel"]
                                                )
                                );
                // Pas besoin des cartes.
            }
            return(lstResultat);
        }