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

使用MySqlBulkLoader导入DataSet遇文件路径错误,请求技术支持

解决MySqlBulkLoader找不到文件的问题

你这是踩了MySqlBulkLoader的一个典型坑——这个工具是让MySQL服务器去读取指定路径的文件,而不是你的本地客户端程序读取。

错误原因分析

你把文件生成在Windows本地的C:\Users\Utilisateur\ds.txt,但你的MariaDB服务器部署在群晖(从报错路径/var/packages/MariaDB10/target/mysql/disk/能看出来),服务器所在的系统根本访问不到你Windows机器上的本地文件。哪怕把路径里的\换成/也没用,因为服务器完全找不到你Windows的C盘。

两种可行解决方案

方案1:将文件放到服务器可访问的路径

  • 把生成的ds.txt上传到群晖中MariaDB服务器有权限读取的目录,比如某个共享文件夹(示例路径:/volume1/your_shared_folder/)
  • 修改MySqlBulkLoader的FileName为服务器上的绝对路径,比如:
    FileName = "/volume1/your_shared_folder/ds.txt"
    
  • 注意要确保MariaDB的运行进程拥有该文件的读取权限,否则还是会触发权限类报错。

方案2:跳过本地文件,直接批量插入数据

如果不想折腾文件上传,推荐用MySqlBulkCopy(需要使用MySqlConnector库,或更新版本的MySql.Data)直接把DataTable的数据发送到服务器,不需要生成中间文件,性能也不会打折扣:

private void button14_Click(object sender, EventArgs e)
{
    using (var conn = new MySqlConnection(Globals.connString))
    {
        conn.Open();
        // 先清空目标表
        MySqlCommand comm = new MySqlCommand("TRUNCATE Song", conn);
        comm.ExecuteNonQuery();

        // 直接批量插入DataTable的数据
        using (var bulkCopy = new MySqlBulkCopy(conn))
        {
            bulkCopy.DestinationTableName = "Song"; // 显式指定目标表名,避免DataTable.ToString()的潜在问题
            bulkCopy.WriteToServer(Globals.ds.Tables[0]);
            Console.WriteLine($"成功插入{Globals.ds.Tables[0].Rows.Count}行数据");
        }
    }
}

另外提个小细节:你原来代码里用Globals.ds.Tables[0].ToString()作为TableName,虽然DataTable的ToString默认返回表名,但显式写"Song"会更稳妥,避免意外问题。

内容的提问来源于stack exchange,提问作者Sebastien Chemouny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:22:48