2010-09-01 83 views
1

使用Windows Server 2003,MySQL 5.1.23,MySQL .NET连接器6.2.2源自MySQL ExecuteNonQuery的'致命错误'?

我想用MySQLBulkLoader类读取固定宽度的文本文件。从类加载方法的摘录是:

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

由 'BuildSqlCommand' 创建的字符串是:

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

当程序launchs的 '的ExecuteNonQuery' 出现以下错误:

(消息)命令执行期间遇到致命错误。 (来源)MySql.Data (内部异常消息)尝试读取结果集时遇到致命错误。

ExecuteNonQuery有任何已知的限制吗?文本文件大小为290MB。

回答

2

经过许多不同的尝试之后,它看起来像错误与混合LOAD DATA INFILE语句的语法以及MySQL Bulk Loader的工作方式有关。由于BuildSQLCommand方法返回的结果不起作用,我最终完全忽略了MySQL Bulk Loader类。 BulkLoader的问题在于,它似乎希望逗号分隔的文件位于我的文件固定宽度且没有字段分隔符的位置。

下面的代码示例适用于导入固定宽度文件 - 表字段大小设置为将文件切片到适当的字段中。

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(); 

我的超时值设置为0。