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

MySQL secure-file-priv设空后C# ExecuteReader执行LOAD DATA异常求助

问题:C#执行LOAD DATA INFILE时MySQL自动追加默认路径导致文件找不到

我已在my.ini文件中设置secure-file-priv="",在MySQL WorkBench中执行以下SQL语句完全正常:

LOAD DATA INFILE '_FILEPATH.txt_' INTO TABLE tablename FIELDS TERMINATED BY '	' LINES TERMINATED BY '
' IGNORE 1 LINES (xxx, yyy, zzz)

但使用C#的DbDataReader.ExecuteReader执行相同语句时返回错误,提示文件不存在——MySQL自动在文件路径前追加了默认路径C:\ProgramData\MySQL\MySQL Server 8.0\Data\DBNAME,报错信息如下:

MySqlException: File 'C:\ProgramData\MySQL\MySQL Server 8.0\Data\DBNAME_FILEPATH.txt_' not found (OS errno 2 - No such file or directory)

我不想让MySQL添加该默认路径,求问题原因及解决办法。


问题原因

  1. 连接配置差异:MySQL WorkBench与C#的MySQL驱动(如MySqlConnector)默认连接参数不同。C#驱动默认会将LOAD DATA INFILE的路径解析逻辑修改,若未明确配置,会把传入的路径视为服务器端数据库目录的相对路径,自动追加默认前缀。
  2. 路径传递问题:若SQL中使用的是相对路径,C#驱动未正确将其识别为客户端侧路径,导致MySQL服务器按自身数据目录规则拼接路径。

解决办法

方法1:修正连接字符串参数

在C#的数据库连接字符串中添加以下配置:

AllowLoadLocalInfile=true;Local=false
  • AllowLoadLocalInfile=true:允许客户端加载本地文件,确保驱动完整传递路径信息。
  • Local=false:强制MySQL使用服务器端LOAD DATA INFILE的原生逻辑,避免路径被自动转换拼接。

如果文件在客户端本地,也可直接使用LOAD DATA LOCAL INFILE语句,但需确保MySQL服务器已开启local_infile参数(临时执行SET GLOBAL local_infile = ON;,或在my.ini中配置local_infile=1永久生效)。

方法2:使用完整绝对路径

确保SQL语句中的文件路径为绝对路径,例如:

LOAD DATA INFILE 'C:\\your\\real\\path\\file.txt' INTO TABLE tablename FIELDS TERMINATED BY '	' LINES TERMINATED BY '
' IGNORE 1 LINES (xxx, yyy, zzz)

在C#代码中可使用@符号简化路径转义:

string sql = @"LOAD DATA INFILE 'C:\your\real\path\file.txt' INTO TABLE tablename FIELDS TERMINATED BY '	' LINES TERMINATED BY '
' IGNORE 1 LINES (xxx, yyy, zzz)";

方法3:升级MySQL驱动

确保使用的MySqlConnector(或MySql.Data)为最新版本,旧版本驱动可能存在路径解析的bug,升级后可修复此类问题。

内容的提问来源于stack exchange,提问作者Mi-krater

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:52:48