Retourne tableau en C#

Résolu
cs_houba80 Messages postés 11 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 10 avril 2013 - 30 mars 2010 à 01:36
cs_houba80 Messages postés 11 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 10 avril 2013 - 30 mars 2010 à 22:24
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

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
30 mars 2010 à 15:50
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é. -
3
cs_houba80 Messages postés 11 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 10 avril 2013
30 mars 2010 à 19:20
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
3
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
30 mars 2010 à 19:41
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é. -
0
cs_houba80 Messages postés 11 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 10 avril 2013
30 mars 2010 à 22:24
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
0
Rejoignez-nous