IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[Problème] LECTURE de fichier .txt / INSERTION de données dans BDD


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Par défaut [Problème] LECTURE de fichier .txt / INSERTION de données dans BDD
    Bonjour à tous,
    Alors j'ai un petit problème que je ne comprends pas... je m'explique:

    Dans mon appli, une partie est dédiée à la récupération de données contenues dans des fichiers textes, puis à leur insertion dans la base de données.
    Alors en gros voilà comment ça marche:

    OpenFiledialog / sélection de 1 ou plusieurs fichiers texte / OK / et op' ça lis le 1er fichier, récupère des données spécifiques (StreamReader) stockées dans des variables / les variables sont insérées dans la requête SQL pour aller dans la BDD.

    Maintenant, dans une autre partie de mon appli, je refait la même chose mise à part que TOUT est automatique: on clique sur un bouton, ça utilise des paramètres pop de connection à un serveur mail, je récupère les pièces jointes des mails spécifiques (intitulé clé), qui vont direct se placer dans un répertoire défini dans les paramètres, et avant de passer au 2nd mail avec l'intitulé clé, je pratique mes fonctions cités au début pour insérer les données dans la BDD.

    Donc le seul changement en interne de ces fonctions, c'est que au lieu de choisir les fichiers avec OpenfileDialog, le chemin des fichiers est spécifié.

    Le problème: je n'y arrive pas
    J'ai beau juste définir le chemin complet du fichier, ça ne marche pas!

    Alors voilà mon code, et si quelqu'un a une idée de ce qui cloche...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
     
            string path = "";
            string var1, var2, var3, var4, var5;
            private MySqlConnection Connection = new MySqlConnection();
            private MySqlDataAdapter MyAdapter = new MySqlDataAdapter();
     
    private void LecturePJ()
            {
                path = "C:\\Documents and Settings\\***\\Mes documents\\TempFiles\\Nouveaux.txt";
     
                //donne le chemin et le nom du fichier au constructeur StreamReader
                FileStream fs = new FileStream(path, FileMode.Open);
                StreamReader sr = new StreamReader(fs, Encoding.UTF8);
                string ligne;
     
                //lit la première ligne du texte
                ligne = sr.ReadLine();
     
                if (ligne == "***")
                {
                    //continue de lire jusqu'à la fin du fichier
                    while (ligne != null)
                    {
                        var1 = ""; var2 = ""; var3 = ""; var4 = ""; var5 = "";
     
                        //on passe à la ligne suivante
                        ligne = sr.ReadLine();
     
                        if (ligne == "***")
                        {
                            // Boucle de récupération par redondance des intervals de lignes
                            for (int compteur = 0; compteur < 52; ligne = sr.ReadLine(), compteur++)
     
                                switch (compteur)
                                {
                                    case 1:
                                        var1 = ligne;
                                        break;
                                    case 2:
                                        var2 = ligne;
                                        break;
                                    case 3:
                                        var5 = ligne;
                                        break;
                                    case 13:
                                        var3 = ligne;
                                        double.Parse(var3);
                                        break;
                                    case 51:
                                        var4 = ligne;
                                        break;
     
     
                                }
     
                            // Appel de la méthode Populate
                            PopulateDataGridView2();
                        }
                    }
                }
                else
                {
                    Console.WriteLine("Le fichier suivant est invalide!\n" + path + "\n");
                }
                //ferme le fichier
                sr.Close();
                fs.Close();
            }
     
     
     
    private void PopulateDataGridView2()
            {
                // mise en tableau des 3 données
                string[] row0 = { var1, var2, var3, var4, var5 };
     
                //Paramètres de connexion
                Connect();
     
                //Définition des SQLParameters
                MySqlParameter param*** = new MySqlParameter("@***", MySqlDbType.String, 50);
                //On associe à la variable récupérée précédemment
                param***.Value = row0[0];
     
                MySqlParameter param*** = new MySqlParameter("@***", MySqlDbType.String, 100);
                param***.Value = row0[1];
     
                MySqlParameter param***= new MySqlParameter("@***", MySqlDbType.Double);
                param***.Value = row0[2];
     
                DateTime madate = DateTime.ParseExact(row0[3], "ddMMyy", null);
                MySqlParameter param*** = new MySqlParameter("@***", MySqlDbType.Date);
                param***.Value = madate;
     
                MySqlParameter param*** = new MySqlParameter("@***", MySqlDbType.String, 40);
                param***.Value = row0[4];
     
                //On définit la requête SQL
                ...***...
                MySqlCommand cmd = new MySqlCommand(sql1.ToString(), Connection);
                //On ajoute les paramètres définis à la commande SQL
                cmd.Parameters.Add(param***);
                cmd.Parameters.Add(param***);
     
               ...***...
                MySqlCommand cmd2 = new MySqlCommand(sql2.ToString(), Connection);
                cmd2.Parameters.Add(param***);
                cmd2.Parameters.Add(param***);
                cmd2.Parameters.Add(param***);
     
                ...***...
                MySqlCommand cmd3 = new MySqlCommand(sql3.ToString(), Connection);
                //On ajoute les paramètres définis à la commande SQL
                cmd3.Parameters.Add(param***);
                cmd3.Parameters.Add(param***);
     
                try
                {
                    Connection.Open();
                    //Exécution requête
                    cmd.ExecuteNonQuery();
                    cmd3.ExecuteNonQuery();
                    //ExecuteSqlNQ(cmd);
                    Connection.Close();
     
                }
     
                catch
                {
                    // Si la connexion a échoué, message d'erreur                
                    Connection.Close();
                }
                try
                {
     
                    Connection.Open();
                    //Exécution requête            
                    cmd2.ExecuteNonQuery();
                    //ExecuteSqlNQ(cmd2);
                    Connection.Close();
                }
                catch
                {
                    Console.WriteLine("Echec d'insertion de " + var2 + "\n" + "(Une duplication de produit est impossible!)\n");
                    Connection.Close();
                }
            }
    ...Merci d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    si tu nous dis pas quelle est l'erreur et où elle se produit, on peut pas deviner...

  3. #3
    Membre confirmé Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Par défaut
    Et bien voilà! Il n'y a aucune erreur, rien qui plante, juste rien qui ne se passe! Pour vérifier que je ne disjonctait pas j'ai créer un nouveau projet à part pour tester, et avec ce code qui devrait normalement marcher!

    Voilà mon programme tiers de test:

    ma form : un bouton, un datagridview;

    variables globales :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private MySqlConnection Connection = new MySqlConnection();
            private MySqlDataAdapter MyAdapter = new MySqlDataAdapter();
            string var1, var2, var3, var4, var5;    //propres aux lignes récupérées dans le .txt, et le chemin  
            string path = "C:\\Documents and Settings\\***\\Mes documents\\TempFiles\\Nouveaux.txt";
    code bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private void button1_Click(object sender, EventArgs e)
            {
                lecture();
            }

    code lecture() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    //donne le chemin et le nom du fichier au constructeur StreamReader
                FileStream fs = new FileStream(path, FileMode.Open);
                StreamReader sr = new StreamReader(fs, Encoding.UTF8);
                string ligne;
     
                //lit la première ligne du texte
                ligne = sr.ReadLine();
     
                if (ligne == "#***")
                {
                    //continue de lire jusqu'à la fin du fichier
                    while (ligne != null)
                    {
                        var1 = ""; var2 = ""; var3 = ""; var4 = ""; var5 = "";
     
                        //on passe à la ligne suivante
                        ligne = sr.ReadLine();
     
                        if (ligne == "#***")
                        {
                            // Boucle de récupération par redondance des intervals de lignes
                            for (int compteur = 0; compteur < 52; ligne = sr.ReadLine(), compteur++)
     
                                switch (compteur)
                                {
                                    case 1:
                                        var1 = ligne;
                                        break;
                                    case 2:
                                        var2 = ligne;
                                        break;
                                    case 3:
                                        var5 = ligne;
                                        break;
                                    case 13:
                                        var3 = ligne;
                                        double.Parse(var3);
                                        break;
                                    case 51:
                                        var4 = ligne;
                                        break;
     
     
                                }
     
                            // Appel de la méthode Populate
                            PopulateDataGridView();
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Le fichier suivant est invalide!\n" + path + "\n");
                }
                //ferme le fichier
                sr.Close();
                fs.Close();
            }
    code PopulateDataGridView() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    public void PopulateDataGridView()
            {
                // mise en tableau des 3 données
                string[] row0 = { var1, var2, var3, var4, var5 };
     
                //Paramètres de connexion
                Connect();
     
                //Définition des SQLParameters
                MySqlParameter paramref = new MySqlParameter("@ref", MySqlDbType.String, 50);
                //On associe à la variable récupérée précédemment
                paramref.Value = row0[0];
     
                MySqlParameter paramdesign = new MySqlParameter("@design", MySqlDbType.String, 100);
                paramdesign.Value = row0[1];
     
                MySqlParameter paramprix = new MySqlParameter("@prix", MySqlDbType.Double);
                paramprix.Value = row0[2];
     
                DateTime madate = DateTime.ParseExact(row0[3], "ddMMyy", null);
                MySqlParameter paramdate = new MySqlParameter("@date", MySqlDbType.Date);
                paramdate.Value = madate;
     
                MySqlParameter paramfamille = new MySqlParameter("@famille", MySqlDbType.String, 40);
                paramfamille.Value = row0[4];
     
                //On définit la requête SQL
                String sql1 = string.Format("INSERT INTO ***(***, ***) VALUES({0},{1})", paramref.ParameterName, paramdesign.ParameterName);
                MySqlCommand cmd = new MySqlCommand(sql1.ToString(), Connection);
                //On ajoute les paramètres définis à la commande SQL
                cmd.Parameters.Add(paramref);
                cmd.Parameters.Add(paramdesign);
     
                String sql2 = string.Format("INSERT INTO ***(***, ***, ***) VALUES({0},{1},{2})", paramdate.ParameterName, paramprix.ParameterName, paramref.ParameterName);
                MySqlCommand cmd2 = new MySqlCommand(sql2.ToString(), Connection);
                cmd2.Parameters.Add(paramdate);
                cmd2.Parameters.Add(paramref);
                cmd2.Parameters.Add(paramprix);
     
                //On définit la requête SQL
                String sql3 = string.Format("INSERT INTO ***(***, ***) VALUES({0},{1})", paramfamille.ParameterName, paramref.ParameterName);
                MySqlCommand cmd3 = new MySqlCommand(sql3.ToString(), Connection);
                //On ajoute les paramètres définis à la commande SQL
                cmd3.Parameters.Add(paramfamille);
                cmd3.Parameters.Add(paramref);
     
                try
                {
                    Connection.Open();
                    //Exécution requête
                    cmd.ExecuteNonQuery();
                    cmd3.ExecuteNonQuery();
                    //ExecuteSqlNQ(cmd);
                    Connection.Close();
     
                }
     
                catch
                {
                    // Si la connexion a échoué, message d'erreur                
                    Connection.Close();
                }
                try
                {
     
                    Connection.Open();
                    //Exécution requête            
                    cmd2.ExecuteNonQuery();
                    //ExecuteSqlNQ(cmd2);
                    Connection.Close();
     
                    // mise en grid du tableau
                    dataGridView1.Rows.Add(row0);
                    dataGridView1.Columns[0].DisplayIndex = 1;
                }
                catch
                {
                    Connection.Close();
                }
            }
    Et aucune erreur ne se produit, mais rien ne se passe... pourtant c'est la même méthode que dans mon autre partie de mon programme qui marche à merveille... je ne comprend pas!

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    tu as essayé d'exécuter le programme en debug pour voir pas à pas ce qui se passe ? dans un cas comme ça c'est la meilleur façon de repérer le problème...

  5. #5
    Membre confirmé Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Par défaut
    C'est déjà fait, là jviens de faire un débug monstrueux pour bien comprendre, toute la partie récupération des variables marche bien (normal j'y ai pas touché depuis mon autre partie de mon appli), puis dans les requetes, les paramètres sont toujours bon, les requetes sont inchangées depuis mon autre partie, et pourtant les requetes ne marchent pas...

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Mets la valeur de retour de ExecuteNonQuery dans une variable pour voir combien de lignes ont été affectées

    Et dans les blocs catch, il faudrait mettre une messagebox ou quelque chose comme ça, sinon l'erreur passe inaperçue. En plus un catch générique qui ne récupère pas les données de l'erreur n'est pas très utile... fais plutôt comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    catch(Exception ex)
                {
                    // Si la connexion a échoué, message d'erreur                
                    MessageBox.Show("Erreur: " + ex.ToString());
                    Connection.Close();
                }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de lecture de fichier txt
    Par membreComplexe12 dans le forum Windows
    Réponses: 4
    Dernier message: 24/03/2010, 09h54
  2. insertion des données dans BD oracle à partir d'un fichier.txt
    Par karimoscapitated dans le forum Oracle
    Réponses: 0
    Dernier message: 29/07/2009, 13h47
  3. Problème de lecture de fichier .txt avec Flash
    Par cdevl32 dans le forum Flex
    Réponses: 0
    Dernier message: 25/05/2008, 17h35
  4. Problème de lecture de fichier .txt
    Par Lenaick dans le forum WinDev
    Réponses: 4
    Dernier message: 16/04/2008, 11h49
  5. Réponses: 12
    Dernier message: 20/12/2007, 17h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo