2010-09-01 80 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。