Problème index out of range avec des List<T>

Résolu
dodo7263 Messages postés 614 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 9 février 2017 - 28 juil. 2013 à 12:28
Adrien2p Messages postés 53 Date d'inscription jeudi 14 février 2013 Statut Membre Dernière intervention 16 juillet 2014 - 29 juil. 2013 à 16:03
Bonjour à tous,

Alors voilà mon soucis. Je cherche à afficher des données provenant d'une base (access) via un select. Dans ma base je n'ai qu'un seul enregistrement avec 4 colonnes et ce sont ces données que je voudrais afficher sur mon interface utilisateur. Pour cela j'utilise les List<T>.
Voici la partie du code qui lève l'exception index out of range :

private List<Sheet> GetSheetsFromDB(OleDbConnection cnx)
        {
            List<Sheet> Sheets = null;
            using (OleDbCommand cmd = cnx.CreateCommand())
            {
                cmd.CommandType = System.Data.CommandType.Text;
                cmd.CommandText = "SELECT * FROM Fiches_observations";
                using (OleDbDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        Sheet sheet = new Sheet();
                        sheet.SheetId = reader["Fic_id"] == DBNull.Value ? default(int) : int.Parse(reader["Fic_id"].ToString());
                        sheet.ObsDate = reader["Fic_ObsDate"] == DBNull.Value ? default(string) : reader["Fic_ObsDate"].ToString();
                        sheet.ObsObject = reader["Fic_Objet"] == DBNull.Value ? default(string) : reader["Fic_Objet"].ToString();
                        sheet.ObsPlace = reader["Fic_Obsplace"] == DBNull.Value ? default(string) : reader["Fic_ObsPlace"].ToString();
                        Sheets.Add(sheet);
                    }
                }
            }
            return Sheets;


L'exception se lève dans le while à cette ligne :

sheet.SheetId = reader["Fic_id"] == DBNull.Value ? default(int) : int.Parse(reader["Fic_id"].ToString());


Ma connexion à ma base de données est OK.
A force de regarder mon code dans tous les sens + les forums, je me dis qu'un oeil extérieur verra ma bêtise au premier coup d'oeil.

@++

SD

A voir également:

5 réponses

Adrien2p Messages postés 53 Date d'inscription jeudi 14 février 2013 Statut Membre Dernière intervention 16 juillet 2014 9
28 juil. 2013 à 14:51
En principe une exception de ce genre signifie que tu es hors des limite maximal de ta liste, par exemple tu as une collection de 10 éléments et tu cherche à récupérer le 11ème éléments.
1
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
28 juil. 2013 à 15:09
Salut, sauf que la ligne ou ça coince ne fait pas appel à la liste.

Je ne connais pas bien les data reader, alors je dis peut etre une bêtise.
Y'a t il bien un champ dans la db qui s'appelle Fic_id, en respetcant la casse?
Si oui, y a t il des valeurs dans ce champs?
0
dodo7263 Messages postés 614 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 9 février 2017 6
28 juil. 2013 à 15:13
Salut wishmeril,

Oui j'ai bien vérifié en base. la première chose que j'ai regardé d'ailleurs. et j'ai bien des données aussi. Je continu de chercher en attendant...merci
0
dodo7263 Messages postés 614 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 9 février 2017 6
28 juil. 2013 à 15:22
En fait wishmeril je crois que ton intuition était bonne. Ma base a bien des données correctes mais elle semblait vérolé. Je n'ai plus la même erreur...merci je continu
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
28 juil. 2013 à 15:27
Au moment ou ça plante, regarde Sheets.Count, s'il y a autant d'enregistrement que dans ta base, c'est que le reader est allé plus loin que permis.

Tu peux aussi regarder la valeur de reader.HasRows, il y n'a peut être pas de connection.
1
dodo7263 Messages postés 614 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 9 février 2017 6
28 juil. 2013 à 15:05
Merci de ta réponse.
Je sais que je suis hors limite mais je ne comprends pas pourquoi en fait.
En effet, la où l'exception est levée, je ne fais qu'ajouter les valeurs trouvées en base dans chacune des propriétés de mon objet sheet.
Ce que je veux dire c'est qu'ici :

sheet.SheetId = reader["Fic_id"] == DBNull.Value ? default(int) : int.Parse(reader["Fic_id"].ToString());


je ne fais qu'aller lire la valeur qui se trouve dans la colonne Fic_id en base et rien que la je suis out of range !!!!

@++

SD
0
dodo7263 Messages postés 614 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 9 février 2017 6
28 juil. 2013 à 15:47
Merci wishmeril,

Bon ma base n'était pas nette. De plus j'avais oublié un petit new. Bref cela fonctionne presque...j'ai des soucis de binding de textbox maintenant. Je vais encore chercher. Je ne ferme pas mon sujet pour le moment...j'attends de voir si je m'en sors.

merci à vous 2 pour vos pistes

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dodo7263 Messages postés 614 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 9 février 2017 6
28 juil. 2013 à 16:11
OK. Bon ben j'ai résolu mon problème de databinding maintenant tout est OK.
Je peux fermer cette discussion.

Merci à vous 2 !

@++

SD
0
De rien
0
Adrien2p Messages postés 53 Date d'inscription jeudi 14 février 2013 Statut Membre Dernière intervention 16 juillet 2014 9
29 juil. 2013 à 16:03
avec plaisir
0
Rejoignez-nous