【问题标题】:Sourcing 'Fatal Error' resulting from MySQL ExecuteNonQuery?采购 MySQL ExecuteNonQuery 导致的“致命错误”?
【发布时间】:2010-09-11 01:46:38
【问题描述】:

使用 Windows Server 2003、MySQL 5.1.23、MySQL .NET 连接器 6.2.2

我正在尝试使用 MySQLBulkLoader 类读取固定宽度的文本文件。该类 Load 方法的摘录是:

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' 

当程序启动“ExecuteNonQuery”时,会出现以下错误:

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

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

【问题讨论】:

    标签: c# .net mysql


    【解决方案1】:

    经过多次不同的尝试,错误似乎与 LOAD DATA INFILE 语句的语法和 MySQL Bulk Loader 的工作方式有关。我最终完全忽略了 MySQL Bulk Loader 类,因为 BuildSQLCommand 方法返回了不起作用的结果。 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。

    【讨论】:

      猜你喜欢
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      相关资源
      最近更新 更多