尝试读取结果集时遇到致命错误。 MySQL Asp.Net
问题描述:
当我试图从txt文件插入数据到mysql表中时,我收到了这个错误。我尝试了整个列表,只有一个项目,使用csv,甚至删除了“”,并创建一个只有一个字段的新表格,但问题在30秒后仍在继续。在我的txt中有一个我需要在表格的1个字段中插入的数字列表,尽管表格有三个不同的字段。先谢谢你。尝试读取结果集时遇到致命错误。 MySQL Asp.Net
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;
}
}
}
答
看起来你的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
,可能使用转义序列正则表达式)。