我已在 my.ini 文件中设置 secure-file-priv="" 如果我在 MySQL WorkBench 中运行 SQL 块,它会完美运行。
但是,当 C# 实际运行 DbDataReader ExecuteReader 时,我收到一个错误。 错误告诉我该文件不存在,但这是因为它在路径的开头附加了默认路径(“'C:\ProgramData\MySQL\MySQL Server 8.0\Data”)< /强> (命令文本与下面的SQL完全相同)
有效的字符串示例
LOAD DATA INFILE '_FILEPATH.txt_' INTO TABLE tablename FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' IGNORE 1 LINES (xxx, yyy, zzz)
执行 Reader 之后返回的错误,现在添加了部分
MySqlException:文件'C:\ProgramData\MySQL\MySQL Server 8.0\Data\DBNAME_FILEPATH.txt_' 未找到(操作系统错误 2 - 没有此类文件或目录)
我不希望它包含“C:\ProgramData\MySQL\MySQL Server 8.0\Data\DBNAME",我不明白为什么会这样。任何帮助将不胜感激!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
这不是我的问题的答案,为什么它会做一些奇怪的事情。 不过,我使用不同的方法解决了我的问题(通过执行 Load-Infile)。
我选择使用 MySQL 客户端 - MySQL Bulk Loader,而不是使用 dbdatareader
string connectionString = Context.Database?.GetDbConnection().ToString(); connectionString = "MY_CON_STRING" using (MySql.Data.MySqlClient.MySqlConnection connection = new MySql.Data.MySqlClient.MySqlConnection(connectionString)) { connection.Open(); MySql.Data.MySqlClient.MySqlBulkLoader loader = new MySql.Data.MySqlClient.MySqlBulkLoader(connection); loader.TableName = "TABLENAME"; loader.FieldTerminator = "\t"; loader.LineTerminator = "\r\n"; loader.NumberOfLinesToSkip = 1; // skip header row loader.FileName = filePath; int rowsInserted = loader.Load(); connection.Close(); }所以,虽然我仍然想知道我的问题的答案,但这对我有用。