2016-07-02 4 views
0

同じテーブルに100kを超えるレコードをコピーし、最初のテーブルに挿入するたびに2番目のテーブルが最初のテーブル挿入ID(プライマリキー)で更新されます。 一括挿入を試みましたが、2番目の表に挿入されるすべての挿入IDを取得できませんでした。 私はMySQL 5.5を使用しています。次のコードを実行すると、ランダムエラーが発生します。MySQLでレコードを一括して挿入するにはどうしたらいいですか?

  1. クエリ中にMySQLサーバーへの接続が失われました。
  2. 現在の接続に関連付けられたトランザクションは を完了しましたが、処分されていません。トランザクションは、 の前に処理されなければならず、接続を使用してSQL文を実行できます。
  3. 順不同のネットパケット:received [x]、expected [y]。

これらのレコードを最適に挿入するにはどうすればよいですか?

CODE;

foreach (var item in transactions) 
{ 
    int transactionId; 
    using (MySqlCommand cm = DM.ConnectionManager.Conn.CreateCommand()) 
    { 
     cm.CommandType = System.Data.CommandType.Text; 
     var commandText = @"INSERT INTO FirstTable SET 
         [email protected];"; 
     cm.CommandText = commandText; 
     cm.Parameters.AddWithValue("@column1", item.column1); 

     cm.ExecuteNonQuery(); 

     transactionId = (int)cm.InsertId; 
    } 

    foreach (var item in item.TransactionDetails) 
    { 
     using (MySqlCommand cm = DM.ConnectionManager.Conn.CreateCommand()) 
     { 
      cm.CommandType = System.Data.CommandType.Text; 
      var commandText = @"INSERT INTO SecondTable SET 
         [email protected], 
         [email protected];"; 
      cm.CommandText = commandText; 
      cm.Parameters.AddWithValue("@column1", item.column1); 
      cm.Parameters.AddWithValue("@column2", item.column2); 

      cm.ExecuteNonQuery(); 

     } 
    } 
} 
+3

一顧、右私の路地まで。唯一の問題は、あなたは昨年から何の答えも受け入れていない。なぜ – Drew

+1

はMySqlがXMLを介してデータを一括してサポートするのを妨げるのですか?データテーブルをXMLに変換し、XMLを入力として取得するストアドプロシージャを作成し、XMLを処理するためにSQLストアドプロシージャコードを作成しますSQL Serverとの時間がわからない場合は、MySqlで同じことが成功したら 'C#Stackoverflow XMLをMySqlデータベースに一括挿入する ' – MethodMan

+0

@MethodMan:はい、MySqlは一括挿入をサポートしていますが、最初のテーブルで更新するので、バルクを使用することはできません。上記のコードでは、TrasactionScopeには他にもたくさんの操作が行われています。しかし、私はあなたの提案された方法を試みます。 – Atulya

答えて

1

のMySQLにインポートする最速の方法はINFILEですので、私は、CSVファイルを作成して、SQL文として以下を実行しているお勧めします。 私は完全なC#セットアップを持っていないし、これをテストしたことに注意してください...しかし、それは私がそれを速くしたいときにバックアップ/復元MySQLの方法です...私は、 CSVファイルが作成され、ディスクに書き込まれた後に実行されます。 https://dev.mysql.com/doc/refman/5.7/en/load-data.htmlから

LOAD DATA LOCAL INFILE 'import.csv' INTO TABLE MyTable FIELDS TERMINATED BY ',' 
    ENCLOSED BY '"' 
    LINES TERMINATED BY '\n' 
    (Col1,Col2,Col3); 

「LOAD DATA INFILEステートメントは非常に高速で、テーブルにテキストファイルから行を読み込む...」

+0

私は疑問がほとんどありません。1. MySQL接続またはC#トランザクションスコープ接続のタイムアウト時間を長くする必要がありますか? 2.他の多くのクエリが同じC#トランザクションスコープで実行されていますが、同じC#トランザクションスコープで読み込みと挿入が可能ですか? – Atulya

+0

こんにちは、私はあなたが答えを受け入れることを尊重していないと思っています。私は答えを "そのまま"残し、それを繰り返すことで、MySQLへの最も効率的なインポートを正直に勧めています。 Be Well :) – Barry

+0

申し訳ありませんが、@バリー私はこれらのプロセスに初心者です。 – Atulya

関連する問題