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

C# Discussion :

Erreur data load infile


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2019
    Messages : 41
    Points : 52
    Points
    52
    Par défaut Erreur data load infile
    Bonjour à tous,
    J'ai un petit projet qui a pour but de transférer un gros nombres de données dans une base de données Mysql. Pour ce faire, j'utilise un Data Load Infile comme utilisé dans un projet précédent.
    Cependant pour une raison inconnue le Data load infile dans ce projet ne veut pas fonctionner, j'ai pourtant passer au peigne fin le projet et l'erreur mais impossible de trouver une solution :/
    Je reçois cette erreur : Fatal error encountered during command execution
    Cette erreur et provoquer lorsque j'essaie d'exécuter la commande du Data Load Infile (ps : ma connexion mysql est correcte)
    Voici le code qui permet de transformer mon DataTable en fichier .txt :
    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
            public static void WriteDataTable(DataTable sourceTable, TextWriter writer, bool includeHeaders)
            {
                if (includeHeaders)
                {
                    IEnumerable<String> headerValues = sourceTable.Columns
                        .OfType<DataColumn>()
                        .Select(column => QuoteValue(column.ColumnName));
     
                    writer.WriteLine(String.Join("µ", headerValues));
                }
     
                IEnumerable<String> items = null;
     
                int i = 1;
                foreach (DataRow row in sourceTable.Rows)
                {
                    items = row.ItemArray.Select(o => QuoteValue(o?.ToString().Replace(',', '.').Replace("\r\n", " ") ?? String.Empty));
                    writer.WriteLine(String.Join("µ", items));
                    if (i == 3) break;
                    i++;
                }
     
                writer.Flush();
            }
     
            private static string QuoteValue(string value)
            {
                return Regex.Replace(String.Concat("\"", value.Replace("\"", "\"\""), "\""), @"\\", @"\\");
            }
    Voici le code qui lance la commande MySQL :
    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
                string tempFileCsv = Environment.CurrentDirectory + @"\UserData\tempUsers.txt";
     
                try
                {
                    using (StreamWriter writer = new StreamWriter(tempFileCsv))
                    {
                        WriteCsv.WriteDataTable(dt, writer, false);
                    }
                }
                catch (System.Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
     
                //Injection via sql
                try
                {
                    string query = @"LOAD DATA LOCAL INFILE '" + tempFileCsv + "' IGNORE INTO TABLE users FIELDS TERMINATED BY 'µ' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' ";
                    MySqlCommand commandCreate;
     
                    commandCreate = new MySqlCommand(query, this.mysqlCo);
                    commandCreate.ExecuteNonQuery();
                }
                catch (MySqlException e)
                {
                    Console.WriteLine(e.Message);
                    Console.WriteLine(e.StackTrace);
                }
                Console.WriteLine("Données chargées avec succès !");
                //System.IO.File.Delete(tempFileCsv);
    Voici un exemple de résultat dans mon fichier tempUsers.txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    "1"µ"SYSTEM"µ"MCP133"µ"PARFILUX"µ"W:\\WINBOOKS\\DATA\\PARFILUX"µ"F"µ""
    "2"µ"SYSTEM"µ"MCP133"µ"TEST"µ"W:\\WINBOOKS\\DATA\\TEST"µ"F"µ""
    "3"µ"SYSTEM"µ"MCP133"µ"CJARDIN2"µ"W:\\WINBOOKS\\DATA\\CJARDIN2"µ"F"µ""
    Voici la structure de ma table MYSQL :
    Nom : test.PNG
Affichages : 88
Taille : 31,5 Ko

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 667
    Points : 5 235
    Points
    5 235
    Par défaut
    Bonjour,

    Je n'utilise pas MySql et ne connais donc pas Data load infile alors je dis peut-être une bêtise.
    Mais si je fais la comparaison avec ce qu'on trouve en SQL Serveur, je me pose les question suivantes:

    1. Est-il normal de mettre la valeur de la colonne IDP dans le fichier alors qu'elle est en auto-increment ?
    2. Est-il normal que la valeur de la dernière colonne n'est jamais mise dans le fichier ?

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2019
    Messages : 41
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par popo Voir le message
    Bonjour,

    Je n'utilise pas MySql et ne connais donc pas Data load infile alors je dis peut-être une bêtise.
    Mais si je fais la comparaison avec ce qu'on trouve en SQL Serveur, je me pose les question suivantes:

    1. Est-il normal de mettre la valeur de la colonne IDP dans le fichier alors qu'elle est en auto-increment ?
    2. Est-il normal que la valeur de la dernière colonne n'est jamais mise dans le fichier ?
    Salut pour le 1er je trouvais ça aussi étrange mais si je ne fais pas ça, cela ne fonctionnera pas sinon pour le point 2 rien d'étrange je mets juste une valeur vide

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 667
    Points : 5 235
    Points
    5 235
    Par défaut
    As-tu essayé d'enlever le ENCLOSED BY et de mettre un véritable entier plutôt qu'une chaîne pour ta clé ?
    As-tu vérifié que tu n'avais pas de doublons de clé dans ton fichier ?

    Cette ligne va replacer tes retour à la lignes par des espaces
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
     items = row.ItemArray.Select(o => QuoteValue(o?.ToString().Replace(',', '.').Replace("\r\n", " ") ?? String.Empty));

    N'entre-elle pas en conflit avec LINES TERMINATED BY '\r\n' ?

Discussions similaires

  1. [MySQL-5.5] pb import CSV avec DATA LOAD INFILE
    Par bronon dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 15/09/2019, 13h43
  2. Detection d'erreur sur LOAD DATA LOCAL INFILE
    Par cquilgars dans le forum Administration
    Réponses: 3
    Dernier message: 01/08/2013, 17h51
  3. Erreur sur LOAD DATA INFILE
    Par crazyday dans le forum Import/Export
    Réponses: 4
    Dernier message: 13/08/2009, 01h56
  4. [1.x] erreur data-load incompréhensible
    Par elvan49 dans le forum Symfony
    Réponses: 2
    Dernier message: 03/07/2009, 09h57
  5. LOAD DATA LOCAL INFILE????
    Par perlgirl dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 05/01/2005, 18h31

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