2017-02-21 83 views
1

我想从Excel数据透视表插入一个数据文件到MySQL使用C#。我正在使用phpmyadmin。我能够使用插入语句来插入数据。但是,我发现插入的性能对于我的目的来说非常慢,因为数据文件将包含至少15000行,并且此操作的发生次数很多。目前我有一个数组列表,其中包含插入前的数据。我在网上阅读,发现我应该使用Load Data Infile并将我的数据存入CSV文件。我的CSV文件没有与我的SQL表相同数量的列。我不知道如何将地址传递给CSV文件,如果其中一行是重复的,我不希望整个操作失败。如果它可以帮助我的情况,我想使用in文件方法。什么是使用C#将大量CSV数据插入到mysql数据库的最快方法?

现在我得到的错误是:找不到文件(ERRCODE:22“无效参数”)

这是迄今为止对于试图在文件的方法将我的代码。

 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

我敢肯定的方式你的问题是题外话,因为它是现在制定。你做了什么尝试?你遇到什么错误?证明你实际上不希望我们为你免费编写代码。请阅读[问]和[mcve]并相应地编辑您的问题。 – davejal

+0

在不改变你的过程的情况下,你应该能够打开连接一次,执行一堆非查询执行,然后关闭连接......我没有准确的句法,但这应该会显着加快速度没有太多的重构。 – user2366842

+0

也考虑[this](http://stackoverflow.com/questions/14330314/bulk-insert-in-mysql) – TaW

回答

1

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

Inserting multiple rows in mysql

相关问题