我正在尝试使用C#将excel数据透视表中的数据文件插入到mysql中。我正在使用phpmyadmin。我能够使用insert语句插入数据。但是,我发现插入的性能对于我的目的来说非常慢,因为数据文件将包含至少15000行,并且此操作将具有大量出现次数。目前我有一个数组列表,在插入之前保存数据。我正在网上阅读,发现我应该使用Load Data Infile并将我的数据保存在CSV文件中。我的CSV文件与SQL表的列数不同。我不知道如何将地址传递给CSV文件,如果其中一行是重复的,我不希望整个操作失败。我想使用in file方法,如果它可以帮助我的情况。
我现在得到的错误是:找不到文件(错误代码:22"参数无效")
这是我到目前为止尝试使用in file方法的代码。
OpenFileDialog ofd3 = new OpenFileDialog();
if (ofd3.ShowDialog() == DialogResult.OK)
{
DirectoryInfo di = new DirectoryInfo("../../files/");
string hours = ofd3.FileName;
string cmd = "LOAD DATA INFILE '" + hours + "' INTO TABLE timesheet FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'";
mysql_insert_infile(cmd);
}
private void mysql_insert_infile(string query)
{
using (var connection = new MySqlConnection("Server=localhost;Database=projectdash;Uid=root;Pwd=;allow zero datetime=yes;Allow User Variables=True"))
using (var cmd = connection.CreateCommand())
{
connection.Open();
cmd.CommandText = query;
try
{
cmd.ExecuteNonQuery();
}
catch (Exception w)
{
// MessageBox.Show(w.Message);
}
}
}
答案 0 :(得分:1)
我打赌将整个文件加载到memmory中,然后创建一个包含至少1000行的“ BULK ”插入命令。
您可以清理数据以避免重复,然后仅使用您需要的列创建命令。
请记住插入多行,如下所述: