当我尝试将数据从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;
}
}
}
答案 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
,可能使用转义序列正则表达式)。