[C#] Alternative au DataReader

Résolu/Fermé
Yog-Sothoth Messages postés 87 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 9 juillet 2008 - 30 avril 2008 à 09:34
Yog-Sothoth Messages postés 87 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 9 juillet 2008 - 30 avril 2008 à 09:59
Bonjour,

J'ai un "léger" souci avec une classe de lecteur/écriture dans des base de données / fichiers excel.

J'utilise les pilotes OleDB (pour pouvoir accéder à des sources de données diverses et variées), et après avoir correctement initialisé ma OleDbConnection et ma OleDbCommand je mets dans mon OleDbDataReader le résultat de l'instruction "maCommandeOleDb.ExecuteReader()". Jusque là rien d'anormal.

Ma fonction, qui se nomme SendRequest() et qui retourne un OleDbDataReader, retourne donc mon DataReader et je peux effectuer des opérations dessus. Le problème est qu'il est impossible de fermer la connection utilisée pour remplir le DataReader, sans quoi ce dernier est impossible à lire...
Je vous laisse imaginer le bordel que cela crée quand on a deux objets de ma classe sus-nommée, l'un accédant à une DB l'autre à un Excel (et pas question de jouer sur les ouvertures/fermetures succésives des Reader, dès qu'on ferme la connexion le machin est illisible...).

La question est-donc la suivante : quelle structure de données conseillez-vous en remplacement de ce DataReader ? OleDB dispose-t-il d'une classe dédiée pour ce problème, que je n'aurais pas vue ? Si non que choisir : arraylist, tableau (bof :-s ...) ?

Merci d'avance.

1 réponse

Yog-Sothoth Messages postés 87 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 9 juillet 2008 7
30 avril 2008 à 09:59
J'up le topic, j'ai (peut être) trouvé une solution satisfaisante : utilisation d'ArrayList (accessible depuis le namespace System.Collections) :

ArrayList maListeTable = new ArrayList();
while (DataReader.Read())
{
     ArrayList maListeLigne = new ArrayList();
     for (int i = 0; i < DataReader.FieldCount; i++)
     {
           maListeLigne.Add(DataReader[i]);
     }
     maListeTable.Add(maListeLigne);
}


Je vous "tiens au courant" si ca fonctionne.
0