You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调用LOAD DATA INFILE导入MySQL数据时触发致命执行错误

我帮你分析下这个问题,其实根源在于MySQL Connector/NET的默认设置和多语句执行的限制,咱们一步步来解决:

问题核心原因

你的代码在MySQL Workbench里能正常跑,但C#里报错,主要有两个关键问题:

  • MySQL Connector/NET 默认禁止一次性执行多条用分号分隔的SQL语句(这是防SQL注入的安全默认),而你把DELETE、ALTER TABLE和LOAD DATA三个语句写在同一个查询字符串里,触发了限制。
  • 使用用户变量(@col2、@col3)时,需要明确开启连接对用户变量的支持,否则Connector/NET会解析失败。

具体解决方案

1. 修改连接字符串,开启多语句和用户变量支持

在你的数据库连接字符串中添加两个关键参数:

// 示例连接字符串,根据你的实际配置调整
string connectionString = "server=localhost;database=你的数据库名;uid=用户名;pwd=密码;AllowMultiQueries=true;AllowUserVariables=true;";
  • AllowMultiQueries=true:允许执行多条分号分隔的SQL语句
  • AllowUserVariables=true:让连接支持使用@开头的用户变量

2. 检查LOAD DATA的文件权限问题

你用的C://time_u.txt路径在Windows下语法没问题,但要注意MySQL服务的运行账户是否有读取该文件的权限。如果遇到权限报错,可以:

  • 把文件放到MySQL默认有权限访问的目录(比如MySQL安装目录下的data文件夹)
  • 改用LOAD DATA LOCAL INFILE,同时在连接字符串再加AllowLoadLocalInfile=true;,并确保MySQL服务器开启了local_infile参数(执行SET GLOBAL local_infile = 1;)

3. 优化代码结构(推荐)

把多个SQL语句分开执行,不仅更容易排查问题,还能避免连接泄漏:

using (MySqlConnection mConn = new MySqlConnection(connectionString))
{
    mConn.Open();
    
    // 执行删除操作
    using (MySqlCommand cmd = new MySqlCommand("DELETE FROM time;", mConn))
    {
        cmd.ExecuteNonQuery();
    }
    
    // 重置自增主键
    using (MySqlCommand cmd = new MySqlCommand("ALTER TABLE time AUTO_INCREMENT=1;", mConn))
    {
        cmd.ExecuteNonQuery();
    }
    
    // 执行数据导入
    string loadQuery = @"LOAD DATA INFILE 'C://time_u.txt' INTO TABLE `time` 
                        CHARACTER SET 'utf8' 
                        FIELDS TERMINATED BY ',' 
                        LINES TERMINATED BY '\n' 
                        IGNORE 1 LINES 
                        (@col2, @col3) 
                        SET date = @col2, hour = @col3;";
    using (MySqlCommand cmd = new MySqlCommand(loadQuery, mConn))
    {
        cmd.ExecuteNonQuery();
    }
}

用using语句可以自动释放数据库连接和命令资源,符合C#的最佳实践。

4. 额外权限检查

确保你的MySQL用户拥有FILE权限(LOAD DATA INFILE需要这个权限),可以执行以下SQL检查:

SHOW GRANTS FOR '你的用户名'@'localhost';

如果没有FILE权限,执行授权语句:

GRANT FILE ON *.* TO '你的用户名'@'localhost';
FLUSH PRIVILEGES;

内容的提问来源于stack exchange,提问作者Lucas Heise

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:25:55