2017-02-21 22 views
1

Я пытаюсь вставить файл данных из таблицы сводной таблицы excel в mysql, используя C#. Я использую phpmyadmin. Я смог использовать инструкцию insert для вставки данных. Тем не менее, я считаю, что производительность для вставки чрезвычайно медленна для моих целей, так как файл данных будет содержать не менее 15000 строк, и эта операция будет иметь большое количество вхождений. В настоящее время у меня есть список массивов, который содержит данные перед вставкой. Я читал онлайн и обнаружил, что должен использовать Load Data Infile и иметь свои данные в CSV-файле. У моего CSV-файла нет одинакового количества столбцов, как у моей таблицы SQL. Я не уверен, как передать адрес в CSV-файл, и я не хочу, чтобы вся операция завершилась неудачно, если одна из строк является дубликатом. Я хочу использовать метод in file, если это может помочь в моей ситуации.Каков самый быстрый способ вставки большого количества CSV-данных в базу данных mysql с использованием C#?

Ошибка я получаю сейчас: Файл не найден (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

Я уверен, что путь ваш вопрос по теме, как это сформулировано в настоящее время. Что вы сделали, чтобы попробовать? Какие ошибки вы столкнулись? Покажите некоторое доказательство, которое вы на самом деле не ожидаете от нас, чтобы писать код для вас бесплатно. Пожалуйста, прочитайте [ask] и [mcve] и соответствующим образом отредактируйте свой вопрос. – davejal

+0

Не изменяя свой процесс слишком много, вы должны иметь возможность открыть соединение один раз, выполнить кучу ненужных исполнений, а затем закрыть соединение ... У меня нет точного синтаксиса, но это должно значительно ускорить процесс без большого количества рефакторинга. – user2366842

+0

Также рассмотрите [это] (http://stackoverflow.com/questions/14330314/bulk-insert-in-mysql) – TaW

ответ

1

Моя ставка будет загрузить весь файл в Memmory, а затем создать «BULK» вставить команду, содержащую, по меньшей мере 1000 строк.
Вы можете очистить свои данные, чтобы избежать дубликатов, а затем создать команду, используя только те столбцы, которые вам нужны.
Только не забудьте вставить несколько строк, как описано здесь:

Inserting multiple rows in mysql

 Смежные вопросы

  • Нет связанных вопросов^_^