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

C# Discussion :

Stocker des OleDbDataAdapter


Sujet :

C#

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 6
    Par défaut Stocker des OleDbDataAdapter
    Bonjour,

    Je suis nouveau sur ce forum et voici mon problème :

    Je développe actuellement une apllication de base de données en C#. Pour le moment j'utilise une base Access mais prochainement elle evoluera vers PostgreSQL.
    C'est mon premier gros projet et j'ai tenu à programmer plus "propre", plus POO et en 3 couches (Données, Métier, Interface) mais je pense que je me suis pris un peu trop au jeu....
    Je souhaitais avoir une structure (ou une classe) pour y stocker mes différents objets se réferrant à une table donnée, puis une collection de ces éléments dans une liste.

    Voici mon code :

    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
     
    class _cDao
        {
            private DataSet ds;
     
            private string[] NomTables = {"Categorie", "Fabricant", "Fournisseur", "RefFournisseur", "Stock" };
     
            private struct sTable
            {
                public string sNomTable;
                public OleDbDataAdapter da;
                public OleDbCommandBuilder cb;
            }
     
            private List<sTable> ListeTables;
     
            public _cDao()
            {
     
                this.ds = new DataSet();
                this.ListeTables = new List<sTable>();
     
                Connexion cnx = new Connexion();
     
                cnx.Open();
     
                foreach (string _itable in NomTables)
                {
                    sTable table = new sTable();
     
                    string requete = "SELECT * FROM " + _itable;
     
                    table.sNomTable = _itable;
     
                    table.da = new OleDbDataAdapter(requete, cnx.GetConnexion());
     
                    table.cb = new OleDbCommandBuilder(table.da);
     
                    table.da.FillSchema(ds, SchemaType.Mapped, _itable);
                    table.da.Fill(ds, _itable);
     
                    ListeTables.Add(table);
                }
     
                cnx.Close();
            }
     
            public DataSet GetDataSet()
            {
                return ds;
            }
     
       }
    Cette partie de code fonctionne bien, je récupére bien mon DataSet chargé correctement. Dans une prochaine version c'est la couche métier qui transmettra les noms de table à récupérer.

    Mon problème est ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
     public void TableUpdate(int _itable)
            {
                sTable table = new sTable();
     
                table = ListeTables[_itable];
     
                table.da(ds.Tables[table.sNomTable]);
            }
    Je n'arrive pas à ré-utiliser le DataAdapter stocké... Je reçois le message d'erreur suivant à la compilation :

    Un membre '_Dao._cDao.sTable.da' ne pouvant pas être appelé ne peut pas être utilisé comme une méthode.
    ...pourtant Intellisense le voit bien.

    Et si j'ajoute une méthode qui me renvoie le DataAdapter, j'ai le message :
    da est un variable utilisé comme un méthode.
    J'ai également essayé de cloner les éléments mais en vain...

    Merci de l'aide que vous pourrez m'apporter.

  2. #2
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Il y a 2 problèmes :

    Pourquoi initialiser table <table = new sTable();> si, à l'instruction suivante, tu refais une affectation sur cette variable <table = ListeTables[_itable];> ?

    Il manque une methode Xxx (Fill?) dans l'instruction <table.da.Xxx(ds.Tables[table.sNomTable]);>
    Quel est l'objectif de ta fonction TableUpdate ?

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 6
    Par défaut
    Bonjour Graffito,

    Pour le premier point, il est vrai que ce n'est pas utile étant donné que j'utilise une structure. En fait c'est un "reste" de la fois où j'ai testé avec une classe.

    Pour le deuxième la méthode est Update.

    Mais il y a une troisième petite erreur, il manque les instructions d'ouverture et fermeture de la connexion.

    TableUpdate est une méthode intégrée à la classe _cDao, l'objectif étant de rationnaliser le code côté métier.

Discussions similaires

  1. stocker des mp3
    Par brasco06 dans le forum Requêtes
    Réponses: 4
    Dernier message: 29/04/2005, 11h45
  2. Stocker des options
    Par koolkris dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 11/02/2005, 16h00
  3. Stocker des infos en local
    Par manu00 dans le forum Bases de données
    Réponses: 6
    Dernier message: 05/06/2004, 22h47
  4. [debutant][JNI]Stocker des objet pour les rappeler plus tard
    Par Celenor dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 28/03/2004, 01h28
  5. Réponses: 4
    Dernier message: 10/10/2003, 18h04

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