Problème index out of range avec des List<T> [Résolu]

dodo7263 642 Messages postés mercredi 10 septembre 2008Date d'inscription 9 février 2017 Dernière intervention - 28 juil. 2013 à 12:28 - Dernière réponse : Adrien2p 53 Messages postés jeudi 14 février 2013Date d'inscription 16 juillet 2014 Dernière intervention
- 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

Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Adrien2p 53 Messages postés jeudi 14 février 2013Date d'inscription 16 juillet 2014 Dernière intervention - 28 juil. 2013 à 14:51
1
Merci
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.

Merci Adrien2p 1

codes-sources a aidé 87955 internautes ce mois-ci

Whismeril 11548 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 25 mai 2018 Dernière intervention - 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?
dodo7263 642 Messages postés mercredi 10 septembre 2008Date d'inscription 9 février 2017 Dernière intervention - 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
dodo7263 642 Messages postés mercredi 10 septembre 2008Date d'inscription 9 février 2017 Dernière intervention - 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
Commenter la réponse de Adrien2p
Meilleure réponse
Whismeril 11548 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 25 mai 2018 Dernière intervention - 28 juil. 2013 à 15:27
1
Merci
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.

Merci Whismeril 1

codes-sources a aidé 87955 internautes ce mois-ci

Commenter la réponse de Whismeril
dodo7263 642 Messages postés mercredi 10 septembre 2008Date d'inscription 9 février 2017 Dernière intervention - 28 juil. 2013 à 15:05
0
Merci
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
Commenter la réponse de dodo7263
dodo7263 642 Messages postés mercredi 10 septembre 2008Date d'inscription 9 février 2017 Dernière intervention - 28 juil. 2013 à 15:47
0
Merci
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

Commenter la réponse de dodo7263
dodo7263 642 Messages postés mercredi 10 septembre 2008Date d'inscription 9 février 2017 Dernière intervention - 28 juil. 2013 à 16:11
0
Merci
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
Adrien2p 53 Messages postés jeudi 14 février 2013Date d'inscription 16 juillet 2014 Dernière intervention - 29 juil. 2013 à 16:03
avec plaisir
Commenter la réponse de dodo7263

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.