C# et les ArrayList (et un peu de bd aussi...)

Signaler
Messages postés
65
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
3 septembre 2004
-
Messages postés
121
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
20 mars 2009
-
Bonjour,

En fait, j'aurais besoin d'un petit conseil.
Je veux écrire une fonction qui se connecte à ma bd, et grâce à uine procédure stockée, récupère les champs que je lui demande.
Ensuite, je veux que ces champs, qui sont en fait les caractéristiques d'un objet (dont j'ai déjà créé la classe), soient stockés dans une liste d'objets...
Le truc, c'est que j'y arrive pas trop..
Est-ce que queslqu'un pourrait m'aider?
Je vous donne un bout de mon code si ça peut vous aider à comprendre mon problème...

connex.Open();
// monres = objet utilisé pour la lecture des données
//renvoyées

SqlDataReader monres = macmd.ExecuteReader();

// création de mon objet
MaClasseObjets MonObjet = new MaClasseObjets ();
// création d'une liste
ArrayList maliste = new ArrayList();

while (monres.Read())
{
for (int i=0; i<monres.FieldCount; i++)
{

// je mets les valeurs des champs dans mon objet => ici : pb...
}
// j'ajoute mon objet à ma liste
maliste.Add(MonObjet);
}
return maliste;

*** Kati ***

6 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
euh
le message d'erreur pourrait peut etre nous aider là
d'ailleurs si C le code d'ajout qui merde, met le aussi

Cocoricoooooooo !!!!
Messages postés
65
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
3 septembre 2004

En fait, j'ai trouvé une solution "barbare".
Je fais :

while (monres.Read())
{
// ici je mets les valeurs des champs retournés dans mon
//objet
monobjet.Id = (int)monres.GetValue(0);
monobjet.Titre = (string)monres.GetValue(1);
//et ainsi de suite...
}
maliste.Add(Actu);

Ca tourne, mais en fait, je voudrais trouver un moyen d'automatiser un peu tout ça, pour faire en sorte de ne pas mettre à chaque fois le nom de l'attribut de mon objet. Ce code est pas pratique : le jour où je change un truc dans ma base, il va falloir que je retourne dans mon code pour tout modifier...

Je sais pas trop si je suis assez claire, et si tu vois ce que je veux dire.

En fait, je veux un code propre et sans les noms des attributs... Mais je sais pas si c'est possible :-/

Enfin merci à toi d'avoir essayé de m'aider !

*** Kati ***
Messages postés
65
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
3 septembre 2004

Désolée, je viens de me rendre compte d'une petite erreur :
à la dernière ligne de code, maliste.Add(Actu); c'est en fait maliste.Add(monobjet);
Ca doit être un tout petit peu plus clair comme ça...

*** Kati ***
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
je vois pas trop comment faire ça

Cocoricoooooooo !!!!
Messages postés
65
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
3 septembre 2004

Merci quand même...

*** Kati ***
Messages postés
121
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
20 mars 2009
1
Pourquoi tu fais pas plutot :

while(monRes.Read())
{
     maliste.Add(new MonObjet(monRes.GetValue(0), monRes....))
}


sinon tu crées un constructeur de ta classe MonObjet qui prend en paramètre un tableau. Ainsi tu lui passes le résultat de toute la ligne renvoyée puis c'est dans ton constructeur que tu initialises toutes les variables de ton objet.

-=[JuS]=-

Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live