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 :

List<List<string>> Parcours impossible ?


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
    Octobre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 36
    Par défaut List<List<string>> Parcours impossible ?
    Bonjour à tous (réédition car le premier message à disparu)

    Je me présente Guillaume, étudiant en info - développer. J'ai un projet à faire actuellement, la technologie utilisé est le C# avec le pattern MVC. (J'utilise donc les objets)

    J'essaye de faire communiquer deux classe (Entreprise et DataBase => Pour le moment je passerai en pattern une fois débuger).

    Ma méthode de classe DataBase me retourne une liste de liste de chaine de caractères.

    class.Entreprise.cs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DataBase MesEntreprises = new DataBase("SELECT * FROM PP2_Entreprise");
    class.DataBase.cs
    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 List<List<string>> select_listeEntreprise()
            {
                List<List<string>> data = new List<List<string>>();
                OracleConnection conn = new OracleConnection(connexion); //j'instancie une nouvelle conncexion
                conn.Open(); //j'ouvre la connexion
                OracleCommand cmd = new OracleCommand(); //j'instancie une commande
                cmd.Connection = conn;//je lui transmet la connexion
                cmd.CommandText = RQT; //je lui donne la requette
     
                OracleDataReader datareader = cmd.ExecuteReader(); //j'execute la requette
     
                int nb = datareader.FieldCount; // le nombre de colone
     
                int y = 1; // indice de la ligne
     
                // test
                List<string> Col = new List<string>();
     
                while (datareader.Read())
                {
                    int i = 0; // i = indice de la colone
                    while (i != nb)
                    {
                        try
                        {
                            string laData = Convert.ToString(datareader.GetValue(i));
                            Col.Add(laData);
                            //j'ajoute dans la liste le résultat
                        }
                        catch (Exception e)
                        {
                            //sinon je transmet une erreur
                            MessageErreur MessErrSelect = new MessageErreur("ORA_0001", "Erreur fatale : \n" + e);
                            MessErrSelect.getMessage();
                        }
     
                        i++;
                    }
                    data.Add(Col);
                    y++;
                }
                return data;
            }

    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
     
    foreach (List<string> values in MesEntreprises.select_listeEntreprise())
                {
                    string var = values[1];
                    string var2 = values[2];
                    Entreprise MonEnrprise = new Entreprise();
                    MonEnrprise.setID(Convert.ToInt16(values[0]));
                    MonEnrprise.setNom(values[1]);
                    MonEnrprise.setAdresse(values[2]);
                    MonEnrprise.setVille(values[3]);
                    MonEnrprise.setFax(values[4]);
                    MonEnrprise.setType(values[5]);
                    MonEnrprise.setQualifie(values[6]);
                    MonEnrprise.setCommentaire(values[7]);
     
                    data.Add(MonEnrprise);
                    MonEnrprise = null;
                }
     
                return data;
    }
    Mon Problème est que j'ai le nom d'entreprise du premier enregistrement qui se répète sur toutes les autres.

    A chaque passage dans la boucle var est égale au premier nom d'entreprise.

    Information supplémentaires :

    Quand je passe le curseur sur MesEntreprises.select_listEntreprise() il marque bien List<List<string>> mais quand je met dans me foreach je ne peux mettre List<string>.

    Je pense que c'est mon foreach mon problème (je ne change pas de ligne je reste sur la première).

    Avez vous une idée ?

    Merci pour vos réponses.

    Vous êtes la solutions des problèmes des autres, grâce à vos aides nous débutant nous devenons vous.

  2. #2
    Membre émérite
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Par défaut
    Salut Guillaume !

    Ma première remarque est pourquoi faire des choses simples quand on peut faire des choses compliqués !

    Dans ta méthode "select_listeEntreprise" au lieu de renvoyer une Liste de Liste il serai plus simple de renvoyer une Liste d’entreprise. C'est à cet endroit que tu dois remplir ton objet Entreprise.

    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
    public List<Entreprise> select_listeEntreprise()
            {
               var entreprises = new List<Entreprise>();
                OracleConnection conn = new OracleConnection(connexion); //j'instancie une nouvelle conncexion
                conn.Open(); //j'ouvre la connexion
                OracleCommand cmd = new OracleCommand(); //j'instancie une commande
                cmd.Connection = conn;//je lui transmet la connexion
                cmd.CommandText = RQT; //je lui donne la requette
     
                OracleDataReader datareader = cmd.ExecuteReader(); //j'execute la requette
     
                while (datareader.Read())
                {
                    var entreprise = new Entreprise();
                    entreprise.setNom(datareader["NomColonneNom"]);
                    entreprise.setAdresse(datareader["NomColonneAdresse"]);
                    //etc....
                    data.Add(entreprise);
                }
                return entreprises;
            }
    Ton code sera grandement simplifié !

    Sinon voici une de mes réponse pour gérer les nulls et le type sur les SqlDataReader ici

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 36
    Par défaut
    Ton message ma beaucoup fait réfléchir, tu as mis le doigt sur mon plus gros défaut. Je cherche toujours à faire plus, à faire mieux. Du coup des fois je part très loin.

    Je vais essayer, je vous tien au courant.

    Merci pour ta réponse.

  4. #4
    Membre émérite
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Par défaut
    Citation Envoyé par Awery2 Voir le message
    Ton message ma beaucoup fait réfléchir, tu as mis le doigt sur mon plus gros défaut. Je cherche toujours à faire plus, à faire mieux. Du coup des fois je part très loin.
    Il faut vraiment écrire du code simple !
    Il faut se dire que si une autre personne passe derrière toi, elle doit comprendre rapidement ce que tu as voulu faire... C'est rarement le cas. Beaucoup de développeurs aiment construire des usines à gaz pour des choses simples.

    PS : J'ai édité mon premier message avec quelques pistes.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 36
    Par défaut
    Merci donc ça nous donne :

    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
     
     public List<Entreprise> select_listEntreprise()
            {
                List<Entreprise> data = new List<Entreprise>();
                OracleConnection conn = new OracleConnection(connexion); //j'instancie une nouvelle conncexion
                conn.Open(); //j'ouvre la connexion
                OracleCommand cmd = new OracleCommand(); //j'instancie une commande
                cmd.Connection = conn;//je lui transmet la connexion
                cmd.CommandText = RQT; //je lui donne la requette
     
                OracleDataReader datareader = cmd.ExecuteReader(); //j'execute la requette
     
                int nb = datareader.FieldCount; // le nombre de colone
                int i = 0;
                int y = 1; // indice de la ligne
     
                while (datareader.Read())
                {
                    try
                    {
                        Entreprise MonEntreprise = new Entreprise(Convert.ToInt16(datareader.GetValue(0)), Convert.ToString(datareader.GetValue(1)),  Convert.ToString(datareader.GetValue(2)),  Convert.ToString(datareader.GetValue(3)),  Convert.ToString(datareader.GetValue(4)),  Convert.ToString(datareader.GetValue(5)),  Convert.ToString(datareader.GetValue(6)),  Convert.ToString(datareader.GetValue(7)));
                        data.Add(MonEntreprise);
                        //j'ajoute dans la liste le résultat
                     }
                     catch (Exception e)
                     {
                        //sinon je transmet une erreur
                        MessageErreur MessErrSelect = new MessageErreur("ORA_0001", "Erreur fatale : \n" + e);
                        MessErrSelect.getMessage();
                     }
                }
     
                return data;
            }

    Puis dans ma classe :
    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 List<Entreprise> getListEntreprise()
            {
                List<Entreprise> data = new List<Entreprise>();
     
                DataBase MesEntreprises = new DataBase("SELECT ID_Entreprise, Nom_Entreprise, Addr_Entreprise, Ville_Entreprise, Fax_Entreprise, Type_Entreprise, Qualifie_Entreprise, Commentaire_Entreprise FROM PP2_Entreprise");
     
                foreach (List<Entreprise> values in MesEntreprises.select_listEntreprise())
                {
                    data.Add(values);
                }
     
                return data;
            }
    Il me dit :

    Error 2 Cannot convert type xxxx.modeles.Entreprise' to 'System.Collections.Generic.List<xxxx.modeles.Entreprise>' C:\Users\2xxxx\Documents\Visual Studio 2012\Projects\xxxx\xxxx\modeles\class.Entreprise.cs 65 13 xxxx

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 36
    Par défaut
    Chère katkiller, j'ai l'honneur de te remercier pour ton conseil qui a porter ses fruits !

    Sujet Résolut :

    /********************
    * Vue *
    ********************/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                Constroleur_Entreprise MesEntreprise = new Constroleur_Entreprise();
     
                foreach (string values in MesEntreprise.getListEntreprise())
                {
                    CLB_Step2_EntrepriseEXT.Items.Add(values);
                }
    /********************
    * CTRL *
    ********************/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            public List<string> getListEntreprise()
            {
                List<string> MesEntreprises = new List<string>();
     
                Entreprise Entreprise = new Entreprise();
                foreach(Entreprise values in Entreprise.getListEntreprise())
                {
                    MesEntreprises.Add(values.getNom());
                }
     
                return MesEntreprises;
            }

    /********************
    * Modèle *
    ********************/
    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 List<Entreprise> getListEntreprise()
            {
                List<Entreprise> data = new List<Entreprise>();
     
                DataBase MesEntreprises = new DataBase("SELECT ID_Entreprise, Nom_Entreprise, Addr_Entreprise, Ville_Entreprise, Fax_Entreprise, Type_Entreprise, Qualifie_Entreprise, Commentaire_Entreprise FROM PP2_Entreprise");
     
                foreach (Entreprise values in MesEntreprises.select_listEntreprise())
                {
                    data.Add(values);
                }
     
                return data;
            }
    /********************
    * DAO *
    ********************/
    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
     
            public List<Entreprise> select_listEntreprise()
            {
                List<Entreprise> data = new List<Entreprise>();
                OracleConnection conn = new OracleConnection(connexion); //j'instancie une nouvelle conncexion
                conn.Open(); //j'ouvre la connexion
                OracleCommand cmd = new OracleCommand(); //j'instancie une commande
                cmd.Connection = conn;//je lui transmet la connexion
                cmd.CommandText = RQT; //je lui donne la requette
     
                OracleDataReader datareader = cmd.ExecuteReader(); //j'execute la requette
     
                int nb = datareader.FieldCount; // le nombre de colone
                int i = 0;
                int y = 1; // indice de la ligne
     
                while (datareader.Read())
                {
                    try
                    {
                        Entreprise MonEntreprise = new Entreprise();
                        MonEntreprise.setID(Convert.ToInt16(datareader.GetValue(0)));
                        MonEntreprise.setNom(Convert.ToString(datareader.GetValue(1)));
                        MonEntreprise.setAdresse(Convert.ToString(datareader.GetValue(2)));
                        MonEntreprise.setVille(Convert.ToString(datareader.GetValue(3)));
                        MonEntreprise.setFax( Convert.ToString(datareader.GetValue(4)));
                        MonEntreprise.setType( Convert.ToString(datareader.GetValue(5)));
                        MonEntreprise.setQualifie(Convert.ToString(datareader.GetValue(6)));
                        MonEntreprise.setCommentaire(Convert.ToString(datareader.GetValue(7)));
                        data.Add(MonEntreprise);
                        //j'ajoute dans la liste le résultat
                     }
                     catch (Exception e)
                     {
                        //sinon je transmet une erreur
                        MessageErreur MessErrSelect = new MessageErreur("ORA_0001", "Erreur fatale : \n" + e);
                        MessErrSelect.getMessage();
                     }
                }
     
                return data;
            }

    MERCI <3

  7. #7
    Membre émérite
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Par défaut
    Citation Envoyé par Awery2 Voir le message
    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
     
     public List<Entreprise> select_listEntreprise()
            {
                List<Entreprise> data = new List<Entreprise>();
                OracleConnection conn = new OracleConnection(connexion); //j'instancie une nouvelle conncexion
                conn.Open(); //j'ouvre la connexion
                OracleCommand cmd = new OracleCommand(); //j'instancie une commande
                cmd.Connection = conn;//je lui transmet la connexion
                cmd.CommandText = RQT; //je lui donne la requette
     
                OracleDataReader datareader = cmd.ExecuteReader(); //j'execute la requette
     
                int nb = datareader.FieldCount; // le nombre de colone
                int i = 0;
                int y = 1; // indice de la ligne
     
                while (datareader.Read())
                {
                    try
                    {
                        Entreprise MonEntreprise = new Entreprise(Convert.ToInt16(datareader.GetValue(0)), Convert.ToString(datareader.GetValue(1)),  Convert.ToString(datareader.GetValue(2)),  Convert.ToString(datareader.GetValue(3)),  Convert.ToString(datareader.GetValue(4)),  Convert.ToString(datareader.GetValue(5)),  Convert.ToString(datareader.GetValue(6)),  Convert.ToString(datareader.GetValue(7)));
                        data.Add(MonEntreprise);
                        //j'ajoute dans la liste le résultat
                     }
                     catch (Exception e)
                     {
                        //sinon je transmet une erreur
                        MessageErreur MessErrSelect = new MessageErreur("ORA_0001", "Erreur fatale : \n" + e);
                        MessErrSelect.getMessage();
                     }
                }
     
                return data;
            }
    Cette partie m'a l'air pas trop mal, mais attention au "null" que tu n'as pas géré pour le moment !

    Citation Envoyé par Awery2 Voir le message
    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 List<Entreprise> getListEntreprise()
            {
                List<Entreprise> data = new List<Entreprise>();
     
                DataBase MesEntreprises = new DataBase("SELECT ID_Entreprise, Nom_Entreprise, Addr_Entreprise, Ville_Entreprise, Fax_Entreprise, Type_Entreprise, Qualifie_Entreprise, Commentaire_Entreprise FROM PP2_Entreprise");
     
                foreach (List<Entreprise> values in MesEntreprises.select_listEntreprise())
                {
                    data.Add(values);
                }
     
                return data;
            }
    Cette méthode est de trop car ta méthode "MesEntreprises.select_listEntreprise()" te renvoi déjà une liste d'entreprise.

    Citation Envoyé par Awery2 Voir le message
    Error 2 Cannot convert type xxxx.modeles.Entreprise' to 'System.Collections.Generic.List<xxxx.modeles.Entreprise>' C:\Users\2xxxx\Documents\Visual Studio 2012\Projects\xxxx\xxxx\modeles\class.Entreprise.cs 65 13 xxxx
    L'erreur est là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     foreach (List<Entreprise> values in MesEntreprises.select_listEntreprise())
    Car tu parcours une liste d' "Entreprise"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     foreach (Entreprise entreprise in MesEntreprises.select_listEntreprise())

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

Discussions similaires

  1. se debarrasser des crochets d'une liste ou d'un string
    Par Azzuri dans le forum Général Python
    Réponses: 2
    Dernier message: 13/12/2008, 13h35
  2. Réponses: 7
    Dernier message: 23/04/2008, 10h21
  3. Regrouper une liste en liste de listes
    Par West01 dans le forum Prolog
    Réponses: 12
    Dernier message: 14/03/2008, 14h07
  4. Parcours d'une liste de liste
    Par pagra dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 10/10/2007, 19h24
  5. [Vb.net] Comment faire une liste à partir d'une string
    Par NicoNGRI dans le forum ASP.NET
    Réponses: 1
    Dernier message: 25/10/2006, 14h15

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