IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Accès aux données Discussion :

[C# - OleDb] Crée une collection de paramètres avant de créer OleDbCommand


Sujet :

Accès aux données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Points : 25
    Points
    25
    Par défaut [C# - OleDb] Crée une collection de paramètres avant de créer OleDbCommand
    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.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Points : 25
    Points
    25
    Par défaut
    J'ai réussi avec une simple ArrayList (je cherchais un truc plus complexe comme quoi parfois il ne faut pas chercher midi à quatorze heure)

    Méthode Générique pour la connection et l'exécution 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
    38
    39
    40
    41
    42
    43
    44
    private DataTable ObtenirListeFiltree(string sqlCmd, ArrayList al_param)
        {
    
            //Définition des variables pour la requete
            OleDbCommand cmd = null; //Commande 
            OleDbDataReader dr = null; //sortie
            DataTable dt_Liste = new DataTable();
    
            try
            {
                //Ouverture de la connexion
                _conn = new OleDbConnection(_connString);
                _conn.Open();
    
                //Création de la commande
                cmd = new OleDbCommand(sqlCmd, _conn);
                cmd.CommandType = CommandType.Text;
    
                //Ajout des parametres à la commande
                for (int i = 0; i < al_param.Count; i++)
                {
                    cmd.Parameters.Add((OleDbParameter)al_param[i]);
                }            
                //Exécution de la requete
                if (_traceAllSqlQueries)
                    _logger.TechDebug(sqlCmd);
                dr = cmd.ExecuteReader();
    
                //Transformation du résultat de la requete en un datatable
                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();
            }
        }

    Une des méthodes appelantes :

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    public DataTable ListeCollabos(string nom, string prenom, string filiale, string pays, string societe, string site, string filiere, string sous_filiere, string fonction, string etablissement)
        {
            DataTable dtListeCollabos = new DataTable();
    
            ArrayList al_param = new ArrayList();
            //Définition des variables pour la requete
            OleDbParameter param = null; //Parametre
    
            #region Gestion des filtres
            [...]
            #endregion
    
            #region Ecriture de la requete (variables definies dans gestion des filtres
    
           string sqlCmd = "SELECT " + colonnes + " FROM " + tables + " WHERE " + filtre + " " + cond_jointures + " ORDER BY " + orderby;
    
            #endregion
    
            #region Ajout des paramètres
    
            param = new OleDbParameter("", OleDbType.VarChar);
            param.Direction = ParameterDirection.Input;
            param.Value = nom.ToUpper() + "%";
            al_param.Add(param);
    
            param = new OleDbParameter("", OleDbType.VarChar);
            param.Direction = ParameterDirection.Input;
            param.Value = prenom + "%";
            al_param.Add(param);
    
    
            if (filiale != "-1")
            {
                param = new OleDbParameter("", OleDbType.VarChar);
                param.Direction = ParameterDirection.Input;
                param.Value = filiale;
                al_param.Add(param);
            }
    
            if (pays != "-1")
            {
                param = new OleDbParameter("", OleDbType.VarChar);
                param.Direction = ParameterDirection.Input;
                param.Value = pays;
                al_param.Add(param);        }
    
            if (societe != "-1")
            {
                param = new OleDbParameter("", OleDbType.VarChar);
                param.Direction = ParameterDirection.Input;
                param.Value = societe;
                al_param.Add(param);
    
            }
    
            if (site != "-1")
            {
                param = new OleDbParameter("", OleDbType.VarChar);
                param.Direction = ParameterDirection.Input;
                param.Value = site;
                al_param.Add(param);
            }
    
            if (filiere != "-1")
            {
                param = new OleDbParameter("", OleDbType.VarChar);
                param.Direction = ParameterDirection.Input;
                param.Value = filiere;
                al_param.Add(param);
    
            }
    
            if (sous_filiere != "-1")
            {
                param = new OleDbParameter("", OleDbType.VarChar);
                param.Direction = ParameterDirection.Input;
                param.Value = sous_filiere;
                al_param.Add(param);
    
            }
    
            if (fonction != "-1")
            {
                param = new OleDbParameter("", OleDbType.VarChar);
                param.Direction = ParameterDirection.Input;
                param.Value = fonction;
                al_param.Add(param);
            }
    
            if (etablissement != "-1")
            {
                param = new OleDbParameter("", OleDbType.VarChar);
                param.Direction = ParameterDirection.Input;
                param.Value = etablissement;
                al_param.Add(param);
            }
    
            #endregion
    
            dtListeCollabos = this.ObtenirListeFiltree(sqlCmd, al_param);
    
            if (dtListeCollabos == null)
            {
    
              #region Creation de la structure du dataset renvoye dans le cas d'un objet vide
              [...]
    
              #endregion
            }
    
            return dtListeCollabos;
        }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Passer une collection en paramètre d'un query
    Par 60sman dans le forum Jasper
    Réponses: 1
    Dernier message: 25/10/2011, 00h21
  2. Le paramètre est une collection
    Par yaya0057 dans le forum iReport
    Réponses: 5
    Dernier message: 27/04/2009, 16h30
  3. Réponses: 1
    Dernier message: 28/03/2009, 17h28
  4. Réponses: 1
    Dernier message: 18/09/2007, 13h58
  5. Comment trier une collection avant de l'afficher ?
    Par piloupy dans le forum Struts 1
    Réponses: 10
    Dernier message: 04/05/2007, 08h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo