尝试读取结果集时遇到致命错误。 MySQL Asp.Net

时间:2017-08-24 22:44:19

标签: c# mysql asp.net

当我尝试将数据从txt文件插入mysql表时,我收到了该错误。我尝试了整个列表,只有一个项目,使用csv,甚至删除""并创建一个只有一个字段的新表,但问题在30秒后继续发生。在我的txt中有一个我需要在表的1个字段中插入的数字列表,尽管该表有三个不同的字段。先感谢您。

protected void Button1_Click(object sender, EventArgs e)
{
    if (FileUploadControl.HasFile)
    {
        try
        {
            if (FileUploadControl.PostedFile.ContentType == "text/plain")
            {

                string filename = Path.GetFileName(FileUploadControl.FileName);
                FileUploadControl.SaveAs(Server.MapPath("~/") + filename);
                StatusLabel.Text = "Upload status: File, "+filename+" uploaded!";
                string dir = Server.MapPath("~/") + filename;
                string strcon = "SERVER = 000.000.000.00; " + "DATABASE=fakedb;" + "UID=fakeid;" +"PASSWORD=fakepass;";
                Response.Write(dir);
                MySqlConnection con = new MySqlConnection(strcon);
               con.Open();
                MySqlCommand cmd = new MySqlCommand("LOAD DATA LOCAL INFILE '" + filename + "' INTO TABLE Cuenta_Test  LINES TERMINATED BY '\n\r'", con);
                cmd.ExecuteNonQuery();
                con.Close();
            }
            else
                StatusLabel.Text = "Upload status: Only txt files are accepted!";
        }
        catch (Exception ex)
        {
            StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

似乎您的MySqlCommand命令文本不正确。它应该是这样的(请注意,您需要使用双反斜杠\\而不是单反斜杠\,以便C#不将行终止符视为转义序列,它用于MySQL命令字符串):

MySqlCommand cmd = new MySqlCommand("LOAD DATA LOCAL INFILE '" + filename + "' INTO TABLE Cuenta_Test LINES TERMINATED BY '\\n\\r'", con);

或者使用string.Format&的命令文本。像这样的文字字符串:

MySqlCommand cmd = new MySqlCommand(string.Format(@"LOAD DATA LOCAL INFILE '{0}' INTO TABLE Cuenta_Test LINES TERMINATED BY '\n\r'", filename), con);

注意:在阅读CSV文件时,您也可以使用FIELDS TERMINATED BY ','作为字段分隔符。将其内容保存到数据库。

您可以采取其他建议来确保成功加载数据命令:

1)尝试在MySQL Workbench中运行相同的命令。检查错误的数据类型错误。

2)使用CommandTimeout属性增加命令超时:

cmd.CommandTimeout = 120; // 2 minutes (example)

3)在写入数据库之前规范化文本文件的行结尾。 \n\r转义符不同于\r\n(利用Replace,可能使用转义序列正则表达式)。