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 le résultat d'une requête dans un tableau


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Par défaut Stocker le résultat d'une requête dans un tableau
    Bonjours tout le monde!

    Ma question est la suivante. j'ai une fonction de procédure stockée qui est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            public SqlDataReader ProcedureStockee(string laProcedure)
            {
                connexionbdd();
     
                SqlCommand scom = new SqlCommand(laProcedure, laConnexion);
                scom.CommandType = CommandType.StoredProcedure;
                reader = scom.ExecuteReader();
     
                return reader;
            }
    et une méthode qui récupère les résultats:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                    //chargement des randonnées
                while (readerRando.Read())
                    {
                        string nomRando = (readerRando["nomRando"].ToString());
                        int duree = System.Convert.ToInt16((readerRando["dureeRando"]));
                        lesRandonnees.ajouteUneRando(nomRando, duree);
                    }

    Qui est appelé par pleins de procédure différentes. Je voudrais stockée les résultats de la requête dans un tableau pour vraiment faire une coupure entre cette classe connexion et les autres sinon le reader va gangrener toutes les autres classes ^^

    j'espére m'être bien expliquer!

    merci et bon week end.


    PS: sans faire exprès sur visual studio j'ai cliqué sur un bouton qui me mets de points pour m'indiquer les espaces et tabulation et tout... vous savez comment enlever ça?

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Si j'ai bien compris, il te suffit de faire une classe pour l'accès aux données.

    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class RandonneeDAO
    {
        public IList<Randonnee> GetListeRandonnee()
        {
              // Appel de la procédure et traitement du résultat.
        }
    }
    Citation Envoyé par elratus
    PS: sans faire exprès sur visual studio j'ai cliqué sur un bouton qui me mets de points pour m'indiquer les espaces et tabulation et tout... vous savez comment enlever ça?
    Menu Edition > Avancé > Afficher les espaces blancs, raccourci clavier Ctrl+E,S

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Par défaut
    Merci pour le raccourci ça me piquais les yeux à force !

    Sinon pour la classe d'accès aux données ça me donne ça pour l'instant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            public SqlDataReader chargeLesRandonnees()
            {
                return connexion.ProcedureStockee("chargeLesRandonnees");
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            public SqlDataReader chargeLesDecouvertes()
            {
                return connexion.ProcedureStockee("chargeLesDecouvertes");
            }
    Comme tu peux le voir, la méthode procédure stockée est utilisé pour pleins de chose mais je ne sais pas comment faire pour dans la méthode chargeLesRandonnees(), créer un tableau et pouvoir facilement utilisé les données derrière...

    et ce ne serait pas une erreur de conception que la classe d'accés à la base connaisse les classes métiers (tableau de randonnées)?
    En faite c'est pas une question.. lol ces méthodes charge() ne doivent pas connaitre les objets, je voudrais des listes non génériques, juste de simple données.


    merci ^^

  4. #4
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par elratus Voir le message
    Comme tu peux le voir, la méthode procédure stockée est utilisé pour pleins de chose mais je ne sais pas comment faire pour dans la méthode chargeLesRandonnees(), créer un tableau et pouvoir facilement utilisé les données derrière...
    Il faut parcourir le DataReader et créer les objets du modèle (objets métier) en conséquence. Tu mets tout ça dans une liste que tu retournes ensuite. C'est pour ça que dans mon exemple je renvoie une IList. Tu ne dois surtout pas renvoyer de DataReader, c'est la mécanique interne et ça ne doit pas être visible de l'extérieur.

    Par exemple
    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
    public class RandonneeDAO
    {
        ...
     
        public IList<Randonnee> ChargeListeRandonnee()
        {
            List<Randonnee> list = new List<Randonnee>();
     
            using(SqlDataReader reader = connexion.ProcedureStockee("chargeLesRandonnees"))
            {
                while (reader.Read())
                {     
                    list.Add(CreateFromDataReader(reader));
                }
            }
     
            return list;
        }
     
        private Randonnee CreateFromDataReader(DataReader reader)
        {
            Randonnee randonnee = new Randonnee();
     
            // Initialisation de l'objet
            ...
     
            return randonnee;
        }
     
        ...
    }
    Citation Envoyé par elratus Voir le message
    et ce ne serait pas une erreur de conception que la classe d'accés à la base connaisse les classes métiers (tableau de randonnées)?
    merci ^^
    Non. La classe d'accès aux données va te permettre de réaliser les opérations CRUD (enregistrement, suppression et chargement des données) d'un objet du modèle, il est donc logique qu'elle est connaissance du modèle.

    Après tu as la mécanique interne derrière qui réalise les opérations bas niveau et qui est utilisée par la classe d'accès aux données (connexion, exécution des requêtes...). Là oui, le modèle n'a pas besoin d'être connu.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 34
    Par défaut
    Bon je vais te montrer en gros ce que j'ai et tu vas comprendre pourquoi je suis confu.. enfin j'espère

    donc comme je l'ai dit j'ai ma classe connexion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            public SqlDataReader ProcedureStockee(string laProcedure)
            {
                connexionbdd();
     
                SqlCommand scom = new SqlCommand(laProcedure, laConnexion);
                scom.CommandType = CommandType.StoredProcedure;
                reader = scom.ExecuteReader();
     
                return reader;
            }

    ensuite j'ai ma classe accesbase qui recupére mes données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        public SqlDataReader chargeLesRandonnees()
            {
                return connexion.ProcedureStockee("chargeLesRandonnees");
            }
     
            public SqlDataReader chargeLesDecouvertes()
            {
                return connexion.ProcedureStockee("chargeLesDecouvertes");
            }
     
            public SqlDataReader chargeLesDifficultes()
            {
                return connexion.ProcedureStockee("chargeLesDifficultes");
            }

    et après j'ai ma classe gestion, qui charge mes classes conteneurs:
    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
            public Gestion()
            {
                this.lesDecouvertes = new LesDecouvertes();
                this.lesDifficultes = new LesDifficultes();
                this.lesGuides = new LesGuides();
                this.lesRefuges = new LesRefuges();
                this.lesSommets = new LesSommets();
                this.lesRandonnees = new LesRandonnees();
                this.maBdd = new AccesBase();
            }
     
     
            private void charger(){
     
                //Instanciation des reader pour plus de lisibilité...
                SqlDataReader readerRando = maBdd.chargeLesRandonnees();
                SqlDataReader readerDiffi = maBdd.chargeLesDifficultes();
                SqlDataReader readerGuide = maBdd.chargeLesGuides();
                SqlDataReader readerSommet = maBdd.chargeLesSommets();
                SqlDataReader readerRefuge = maBdd.chargeLesRefuges();
                SqlDataReader readerTraverser = maBdd.chargeTraverser();
                SqlDataReader readerVisiter = maBdd.chargeVisiter();
                SqlDataReader readerDecouvertes = maBdd.chargeLesDecouvertes();
                SqlDataReader readerPosseder = maBdd.chargePosseder();
                SqlDataReader readerSpecialiser = maBdd.chargeSpecialiser();
                SqlDataReader readerEncadrer = maBdd.chargeEncadrer();
     
     
     
     
                    //chargement des randonnées
                while (readerRando.Read())
                    {
                        string nomRando = (readerRando["nomRando"].ToString());
                        int duree = System.Convert.ToInt16((readerRando["dureeRando"]));
                        lesRandonnees.ajouteUneRando(nomRando, duree);
                    }
     
                //chargement des randonnées
                while (readerDecouvertes.Read())
                {
                    string nomDecouv = (readerDecouvertes["libDecouv"].ToString());
                    lesDecouvertes.ajouteUneDecouverte(nomDecouv);
                }
    Mais connaître les classes métiers dans accesbase signifierai instancier de nouveau mes classes conteneurs...

    Peut être que j'ai fait une erreur après ^^ désolé si j'ai mal compris une de tes précédentes explications!

    Merci encore de m'aider !!

  6. #6
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Cet article peut-t-être bien utile:
    ftp://ftp-developpez.com/morpheus/ar...chitecture.pdf

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

Discussions similaires

  1. [PostgreSQL] Stocker le résultat d'une requête dans un tableau
    Par vandman dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 20/04/2015, 10h57
  2. [MySQL] Résultat d'une requête dans un tableau
    Par olivier94 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 22/03/2007, 21h03
  3. [MySQL] Afficher le résultat d'une requête dans un tableau
    Par magobouli dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 26/02/2007, 14h41
  4. Cmt stocker le résultat d'une requête dans une variable ?
    Par innova dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 07/02/2007, 09h41
  5. Réponses: 12
    Dernier message: 09/01/2007, 19h04

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