【发布时间】:2017-02-22 11:23:42
【问题描述】:
我正在尝试使用 C# 将 excel 数据透视表中的数据文件插入 mysql。我正在使用 phpmyadmin。我能够使用插入语句插入数据。但是,我发现插入的性能对于我的目的来说非常慢,因为数据文件将包含至少 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);
}
}
}
【问题讨论】:
-
我很确定您的问题与现在制定的主题无关。你做了什么尝试?你遇到了什么错误?出示一些您实际上并不希望我们免费为您编写代码的证据。请阅读How to Ask 和minimal reproducible example 并相应地编辑您的问题。
-
在不过多更改进程的情况下,您应该能够打开连接一次,执行一堆非查询执行,然后关闭连接...我手边没有确切的语法,但这应该会大大加快速度,而无需进行太多重构。
-
也可以考虑this