2010-09-01 4 views
1

Utilisation de Windows Server 2003, MySQL 5.1.23, MySQL .NET Connector 6.2.2Sourcing 'Erreur fatale' résultant de MySQL ExecuteNonQuery?

J'essaie d'utiliser la classe MySQLBulkLoader pour lire dans un fichier texte de largeur fixe. Un extrait de ce que les classes Procédé de charge est la suivante:

string sql = BuildSqlCommand(); 
MySqlCommand cmd = new MySqlCommand(sql, Connection); 
cmd.CommandTimeout = 10 * 60;// Timeout; 
cmd.ExecuteNonQuery(); 

La chaîne créée par 'BuildSqlCommand' est:

LOAD DATA LOCAL INFILE 'c:/M/D/ALLDATA_0.TXT' INTO TABLE dk.tk 
FIELDS TERMINATED BY '' LINES TERMINATED BY '\n' 

Lorsque le programme launchs le «ExecuteNonQuery l'erreur suivante se produit:

(Message) Erreur fatale rencontrée lors de l'exécution de la commande. (Source) MySql.Data (Message d'exception interne) Une erreur fatale s'est produite lors de la tentative de lecture du jeu de résultats.

Existe-t-il des limitations connues à ExecuteNonQuery? La taille du fichier texte est de 290 Mo.

Répondre

2

Après plusieurs tentatives différentes, il semble que l'erreur était liée à un mélange de la syntaxe de l'instruction LOAD DATA INFILE et du fonctionnement de MySQL Bulk Loader. J'ai fini par ignorer complètement la classe MySQL Bulk Loader car la méthode BuildSQLCommand renvoyait des résultats qui ne fonctionnaient pas. Le problème avec BulkLoader est qu'il semble vouloir des fichiers délimités par des virgules où mon fichier était de largeur fixe sans délimiteurs de champs. L'exemple de code suivant fonctionne pour l'importation d'un fichier de largeur fixe: les tailles de champ de table sont configurées pour découper le fichier dans les champs appropriés.

string sql = @"load data infile 'c:/myfolder/Data/" + aFile.Name 
+ "' ignore into table t_data fields terminated by '' enclosed by '' lines terminated by '\n'"; 
MySqlCommand cmd = new MySqlCommand(sql, conn); 
cmd.CommandTimeout = Timeout; 
cmd.ExecuteNonQuery(); 

Ma valeur du délai d'attente est réglé sur 0.

Questions connexes