bonjour,

Le titre du message n'a pas l'air explicite mais je n'arrive pas très bien à formuler ma demande en quelques mots.

Pour résumer la situation je vais faire pas mal de méthodes se servant de requetes et donc au lieu de réecrire à chaque fois la connexion, l'ajout de parametres, j'aimerais centraliser un peu le code voici un exemple simple :

Ici la méthode qui est liée à la couche présentation et qui donc crée juste la requête
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public DataTable SelectAll_Site()
    {
        DataTable dtSite = new DataTable();
 
        string sqlCmd = "SELECT Identifiant, Libelle"
                        + " FROM " + _schemaOwner + "SITE"
                        + " ORDER BY Libelle";
        dtSite = this.ObtenirListe(sqlCmd);
 
        if (dtSite == null)
        {
            dtSite.Columns.Add("Identifiant");
            dtSite.Columns.Add("Libelle");
        }
 
        return dtSite;
    }
et voici donc la méthode obtenirListe qui s'occupe de tout ce qui est connection et execution de la requete:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
    public DataTable ObtenirListe(string requete)
    {
        //Définition des variables pour la requete
        OleDbCommand cmd = null; //Commande 
        OleDbDataReader dr = null; //sortie
 
        //Ouverture de la connexion
        _conn = new OleDbConnection(_connString);
        _conn.Open();
 
        DataTable dt_Liste = new DataTable();
 
        try
        {
            string sqlCmd = requete;
            cmd = new OleDbCommand(sqlCmd, _conn);
            cmd.CommandType = CommandType.Text;
 
            if (_traceAllSqlQueries)
                _logger.TechDebug(sqlCmd);
            dr = cmd.ExecuteReader();
 
            dt_Liste = OleDbDataReader_to_DataTable(ref dr);
 
            return dt_Liste;
        }
        catch (Exception Err)
        {
            Err_Log.Write(Err);
            return null;
        }
        finally
        {
            if (cmd != null) { cmd.Dispose(); cmd = null; }
            _conn.Close();
        }
    }

Si je veux ensuite avoir la liste de tous les pays par exemple j'aurais juste à créer une méthode du type : SelectAll_Site() sans m'occuper de gérer la connection.


Ce code là fonctionne, là où survient mon problème c'est quand je souhaite ajouter des paramètres(OleDbParameter) à la requête. Je devrais selon mon idée, gérer ces paramètres dans une méthode surchargée
ObtenirListe(string requete, Collection de parametres)

et dans cette méthode, parcourir la collection pour ajouter les parametres au oledbcommand dans l'ordre où ils ont été déclarés.
J'ai donc besoin d'une Collection qui prenne en charge des OleDbParameter et qui conserve l'ordre des objets.


Auriez vous une idée? Feriez vous autrement?


Merci pour vos réponses, n'hésitez pas à me poser des question si certains passages n'étaient pas clairs pour vous.