首页 > 解决方案 > MySQL 连接器/网络批量上传器在远程服务器上找不到文件

问题描述

我浏览了许多页面试图找到答案,但没有运气。我有一个用 C# 构建的 .NET 页面,直到几天前它一直运行良好。现在它不起作用,我正在拔头发以找出原因。

该页面有一个文件上传器,用于上传 .csv 文件并将其保存到 Web 服务器上的文件夹中。然后它使用 MySQL Bulk Uploader 将记录插入到另一台服务器上的数据库中。

我已经确认文件正在上传到正确的文件夹,但是当 MySQL 尝试插入记录时,它失败并显示消息“File 'E:\inetpub\wwwroot\training\data_uploads\filename.csv' not found (Errcode: 2 - 没有相应的文件和目录)”

这个页面已经运行了几年没有任何问题,但是我更新了一些 NuGet 包并删除了一些没有使用的包,现在它停止了工作。我错过了什么?我需要重新添加一个包或 .dll 吗?不幸的是,我不记得我删除了什么。

这是我正在使用的代码:

protected void btnGo_Click(object sender, EventArgs e)
    {
        try
        {
            
            //if file is selected for upload
            if (btnSelectFile.HasFile)
            {
                //upload data file to server
                string path = string.Concat(Server.MapPath("~/data_uploads/" + btnSelectFile.FileName));
                btnSelectFile.SaveAs(path);

                string conString = ConfigurationManager.ConnectionStrings["nameOfConnectionString"].ConnectionString;

                MySqlConnection conn = new MySqlConnection(conString);
                conn.Open();

                //get rid of old data
                MySqlCommand truncateTerms = new MySqlCommand("TRUNCATE terms_temp;", conn);
                truncateTerms.ExecuteNonQuery();


                //create bulk uploader and set parameters
                var bl = new MySqlBulkLoader(conn);
                bl.TableName = "terms_temp";
                bl.FieldTerminator = ",";
                bl.FieldQuotationCharacter = '"';
                bl.LineTerminator = "\r\n";
                bl.FileName = path;
                bl.NumberOfLinesToSkip = 2;

                //insert data
                var inserted = bl.Load(); //This is where it fails


                conn.Close();
    //do some other stuff
     catch (Exception ex)
        {
            Label1.ForeColor = System.Drawing.Color.Red;
            Label1.Text =  ex.Message.ToString();
        }

    }

标签: mysqlc#visual-studio

解决方案


如果您要批量加载存储在Web服务器而不是数据库服务器上的文件,则需要设置MySqlBulkLoader.Local = true, 以指示该文件是数据库客户端的本地文件。否则,服务器将给出找不到文件的错误。

出于安全原因,您还需要AllowLoadLocalInfile=true在连接字符串中设置以启用此功能。


推荐阅读