使用C#将大量CSV数据插入mysql数据库的最快方法是什么?

时间:2017-02-21 14:13:59

标签: c# mysql excel csv

我正在尝试使用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);

            }



        }


    }

1 个答案:

答案 0 :(得分:1)

我打赌将整个文件加载到memmory中,然后创建一个包含至少1000行的“ BULK ”插入命令。
您可以清理数据以避免重复,然后仅使用您需要的列创建命令。
请记住插入多行,如下所述:

Inserting multiple rows in mysql