/// <summary>
        /// Renvoie le dataset, mais en renommant les tables avec les infos fournies dans la première table !
        /// La première table (table[0]) doit contenir les colonnes index et name :
        ///     Index de la table dans le Dataset
        ///     Name nom à attribuer à l'objet DataTable du DataSet
        /// Le nombre de lignes de la première table doit correspondre au nombre de de tables renvoyées (Table 0 incluse !)
        /// Ex : Pour renvoyer 3 tables documentées (Table1, Table 2, table 3),
        ///      il faut insérer une table "0" qui contiendra 4 lignes : 0, 'Documentation' UNION 1, 'Table1' UNION 2, 'Table 2' UNION 3, 'table 3'
        /// </summary>
        /// <param name="commandText">le sql ou le nom de la procédure stockée</param>
        /// <param name="commandType">Le type de commande</param>
        /// <param name="parameters">Les paramètres de la requête</param>
        /// <param name="timeOut">Le temps d'exécution alloué uniquement pour cette requete (en ms)</param>
        /// <returns>Le dataset</returns>
        public DataSet ExecuteDataSetWithTableName(string commandText, CommandType commandType = CommandType.Text, IEnumerable <SqlParameter> parameters = null, int?timeOut = null)
        {
            DataSet dst = this.ExecuteDataSet(commandText, commandType, parameters, timeOut);

            if (dst != null && dst.Tables.Count > 1 && dst.Tables[0].Rows.Count >= dst.Tables.Count)
            {     // les conditions sont remplies : la première table décrit les autres tables
                if (dst.Tables[0].Columns.Contains("Index") && dst.Tables[0].Columns.Contains("Name"))
                { // la première table a les bonnes infos
                    int    index;
                    string name;
                    foreach (DataRow r in dst.Tables[0].Rows)
                    {
                        index = ConnectionParam.ConvertToInt(r["Index"], 0);
                        if (index >= 0 && index < dst.Tables.Count)
                        {
                            name = ConnectionParam.ConvertToString(r["Name"], string.Empty);
                            if (!string.IsNullOrWhiteSpace(name))
                            {
                                dst.Tables[index].TableName = name;
                            }
                        }
                    }
                }
            }

            return(dst);
        }
 /// <summary>
 /// Exécute une requête et renvoie un entier
 /// </summary>
 /// <param name="commandText">le sql ou le nom de la procédure stockée</param>
 /// <param name="defaultValue">Valeur par défaut appliquée si la requête renvoie un truc null</param>
 /// <param name="commandType">Le type de commande</param>
 /// <param name="parameters">Les paramètres de la requête</param>
 /// <param name="timeOut">Le temps d'exécution alloué uniquement pour cette requete (en ms)</param>
 /// <returns>Un entier ou la valeur par défaut</returns>
 public int ExecuteGetId(string commandText, int defaultValue, CommandType commandType = CommandType.Text, IEnumerable <SqlParameter> parameters = null, int?timeOut = null)
 {
     return(ConnectionParam.ConvertToInt(this.ExecuteScalar(commandText, commandType, parameters, timeOut), defaultValue));
 }