Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C#] Problème de cast

String -> String

    2 mai 2011 à 16:43:54

    Bonjour à tous, j'ai un problème de cast dans mon programme en cours, je suis censé lire les infos contenus dans une DB Access (.mdb). J'utilise OleDB.

    Sans plus attendre voilà le code :


    //Fonction fautive
            public List<FieldList> GetMDBRecordList(String P_Table)
            {
                List<FieldList> V_RecordList = new List<FieldList>();
                MyMDBDataCmd = MyMDBDataConnection.CreateCommand();
                //P_Table contient le nom de la table Access envoyée en paramètre
                MyMDBDataCmd.CommandText = "SELECT * FROM " + P_Table;
    
                try
                {
                    MyMDBDataConnection.Open();
                    DbDataReader V_Reader = MyMDBDataCmd.ExecuteReader();
                    while (V_Reader.Read())
                    {
                        FieldList V_Record = new FieldList();
                        Field V_Field0 = new Field("", P_Table);
                        V_Record.Add(V_Field0);
                        for (int i = 0; i < V_Reader.FieldCount; i++)
                        {
                            Field V_Field = new Field();
                            //Problème de cast : 
                            //l'exception indique "Le cast spécifié n'est pas valide".
                            V_Field.Value = V_Reader.GetString(i);
                            V_Record.Add(V_Field);
                        }
                        V_RecordList.Add(V_Record);
                    }
                    MyMDBDataConnection.Close();
                    V_Reader.Close();
                    MyMDBDataCmd.Dispose();
                    return V_RecordList;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("ERREUR :\n" + ex.Message);
                    return null;
                }
            }
    

    Définition de Field
    public class Field
        {
            public string _Value;
            public string Value { get { return _Value; } set { _Value = value; } }
            public string SQLName;
            public string SQLType;
    
            public Field(string P_SQLType, string P_SQLName)
            {
                SQLName = P_SQLName;
                SQLType = P_SQLType;
            }
    
            public Field() { }
        }
    



    En mode debug quand le compilo arrive à la ligne juste après le commentaire, il saute dans le catch en me hurlant que mon cast n'est pas valide, or V_Reader (instance du reader) .GetString(i) devrait me renvoyer une String, et le champ V_Field.Value est aussi une String.


    En cherchant sur le net j'ai vu pas mal de sujets qui conseillaient de changer les options du debuger. J'ai tout bien changé et tout bien vérifié, mais il me manque forcément quelque chose sinon l'erreur ne serait pas là.

    Merci d'avance pour vos réponses, bonne soirée à tous !
    • Partager sur Facebook
    • Partager sur Twitter
      2 mai 2011 à 17:31:12

      J'imagine que V_Reader.GetString() ne convertit pas les données lues en string mais essaie simplement de les caster, donc ton code déclenchera une erreur si une des colonnes de ta table n'est pas de type VARCHAR ou NVARCHAR. Essaie avec V_Reader.GetValue(i).ToString() pour voir ce que ça donne :)

      Note: c'est peut-être moi, mais j'ai rarement eu autant de mal à lire un morceau de code C# à cause de tes conventions de nommage. Pourquoi ne pas appliquer les conventions préconisées par Microsoft ? :(

      Note2: tu devrais mettre tes appels aux méthodes Close() et Dispose() dans un bloc finally après le catch.
      • Partager sur Facebook
      • Partager sur Twitter
        3 mai 2011 à 8:52:44

        Merci pour les conseils.
        J'utilise les conventions de nommage de mon supérieur (je suis stagiaire là ^^) dans l'idée que n'importe qui dans la boite ne sera pas dépaysé par la relecture ^^


        Bon, après modifications, la boucle fait ce que je voudrais en mode debug. Je lance les tests pour la release avec des MessageBox :)
        Merci pour les infos, si le problème persiste je reposterais ici. Bonne journée ;)
        • Partager sur Facebook
        • Partager sur Twitter

        [C#] Problème de cast

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown