Retourne tableau en C# [Résolu]

cs_houba80 12 Messages postés mardi 30 septembre 2008Date d'inscription 10 avril 2013 Dernière intervention - 30 mars 2010 à 01:36 - Dernière réponse : cs_houba80 12 Messages postés mardi 30 septembre 2008Date d'inscription 10 avril 2013 Dernière intervention
- 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
Afficher la suite 

4 réponses

Répondre au sujet
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 30 mars 2010 à 15:50
+3
Utile
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é. -
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de krimog
cs_houba80 12 Messages postés mardi 30 septembre 2008Date d'inscription 10 avril 2013 Dernière intervention - 30 mars 2010 à 19:20
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_houba80
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 30 mars 2010 à 19:41
0
Utile
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é. -
Commenter la réponse de krimog
cs_houba80 12 Messages postés mardi 30 septembre 2008Date d'inscription 10 avril 2013 Dernière intervention - 30 mars 2010 à 22:24
0
Utile
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
Commenter la réponse de cs_houba80

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.