Retourne tableau en C# [Résolu]

Signaler
Messages postés
12
Date d'inscription
mardi 30 septembre 2008
Statut
Membre
Dernière intervention
10 avril 2013
-
Messages postés
12
Date d'inscription
mardi 30 septembre 2008
Statut
Membre
Dernière intervention
10 avril 2013
-
Slaut cher mombre je suis entrain de developper un GED avec C#, j'ai une classe Groupe qui contient la méthode id_groupe(), cette derniere va me renvoyer les ID des groupe dans un tableau dynamique afin que je puisse affecter un utilisateur lors de sa création a un groupe, mais j'arrive pas a le faire, voici le code de ma méthode :

public List<string> id_groupe()
{

string rsql;
List<string> id = new List<string>();
rsql = "select * from groupe";
try
{
SqlCommand myCommand = new SqlCommand(rsql, CnxBase.myConn);
myCommand.Transaction = CnxBase.trans;
SqlDataReader myReader = myCommand.ExecuteReader();


while (myReader.Read())
{

for (int i = 0; i < id.Capacity ; i++)
{
id.Insert(i, (String)myReader["ID_groupe"]) ;
// id[i] = "iheb";
}

}
myReader.Close();
return id;
}
catch (Exception myErr)
{
throw (new Exception(myErr.ToString()));
}
}

et voici son appel dans la classe AjouterUtilisateur:

List<string> id_grp= new List<string>;
for (int i = 0; i < id_grp.Capacity; i++)
{
id_grp[i] = (string)(myGroupe.id_groupe().ToString());
groupe.Items.Add(id_grp[i]); //ceci est un combobox
}



Merci pour vous j'ai besoin de votre aide

4 réponses

Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
42
Salut

Bon, tu as pas mal de trucs à corriger.
Déjà, commençons par les noms.
Tu as des id_grp, des id_groupe(), des MyGroupe, des id... on s'y perd.
Ensuite, la propriété Capacity de la classe List<T> n'est pas utilise sauf à des fins d'optimisation.
De plus, tu catch une exception dans le seul but de la renvoyer. Ça n'a absolument aucun intérêt.
Certaines boucles ne servent à rien dans ton code.
Enfin, si tu veux simplifier le code (mais perdre un (tout tout petit) peu de performances), utilise foreach plutôt que for.

public List<string> GetIdGroupe()
{
    string requeteSQL = "SELECT * FROM groupe";
    List<string> liste_id = new List<string>();
    try
    {
        SqlCommand commande = new SqlCommand(requeteSQL, CnxBase.myConn);
        SqlDataReader reader = commande.ExecuteReader();

        while(reader.Read())
        {
            liste_id.Add((string)reader["ID_Groupe"]);
        }

        reader.Close();

        return liste_id;
    }
    catch (Exception e)
    {
        MessageBox.Show("L'erreur suivante à été levée : " + e.Message);
    }
}

// Appel de la méthode :
List<string> liste_id = GetIdGroupe();
foreach(string id in liste_id)
{
    groupe.Items.Add(id);
}


Attention également que dans ce code (comme dans le tien), l'ouverture et la fermeture de la connexion à la base de données ne sont pas gérées.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
Messages postés
12
Date d'inscription
mardi 30 septembre 2008
Statut
Membre
Dernière intervention
10 avril 2013

Merci pour ton aide, mais ton code aussi contient quelque erreur et pour mon ancien code contient une erreur juste dans le remplissage du tableau

public List<string> GetIdGroupe()
               {
                   string rsql = "SELECT * FROM groupe";
                   List<string> liste_id = new List<string>();
                   try
                   {
                       SqlCommand myCommand = new SqlCommand(rsql, CnxBase.myConn);
                       myCommand.Transaction = CnxBase.trans;
                       SqlDataReader myReader = myCommand.ExecuteReader();

                       while (myReader.Read())
                       {
                           liste_id.Add((string)myReader["ID_Groupe"]);
                       }
                       myReader.Close();
                       return liste_id;
                   }
                   catch (Exception myErr)
                   {
                       throw (new Exception(myErr.ToString()));
                   } 
               }

// appel

List<string> liste_id = new List<string>();
              liste_id = myGroupe.GetIdGroupe();
              foreach (string id_grp in liste_id)
              {
                  groupe.Items.Add(id_grp);
              }

il fonctionne maintenant en tout cas merci pour ton aide dieu que te protège mon pote
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
42
Alors encore quelques remarques :
Ton try / catch, là encore, ne sert à rien. En gros, tu dis "S'il y a une exception... il y a une exception"
Normalement, ton catch est censé corriger ou avertir du problème.
Et si tu veux absolument faire ça (faire un try/catch pour faire joli qui ne sert à rien), fait plutôt
throw myErr;
que
throw (new Exception(myErr.ToString())); 

au moins, ainsi, tu gardes toutes les informations sur ton erreur (type, stack, message...) et pas simplement message.

Autre chose :
List<string> liste_id = new List<string>();
liste_id = myGroupe.GetIdGroupe();

Dans ta première ligne, tu crées une nouvelle liste qui ne sert à rien, puisque tu perds la référence à la deuxième ligne.

> List<string> liste_id myGroupe.GetIdGroupe();

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
Messages postés
12
Date d'inscription
mardi 30 septembre 2008
Statut
Membre
Dernière intervention
10 avril 2013

j'ai essayer ton try catch mais ça pas marcher et je suis pas entrain de faire un try/catch pour faire joli qui ne sert à rien comme tu as dis.
bon pour l'appel de la méthode tu as totalement raison j'ai créer une liste qui sert à rien merci pour tes conseils mon pôte