c# - 如何在MySQL中批量插入记录?

标签 c# mysql

我必须在同一个表中复制超过 100k 条记录,并且在第一个表中插入每一行后,第二个表将使用第一个表插入 ID(主键)进行更新。 我尝试进行批量插入,但随后我无法获得将插入到第二个表中的所有插入 ID。 我正在使用 MySQL 5.5。当我运行以下代码时,我收到以下随机错误:

  1. 查询期间失去与 MySQL 服务器的连接。
  2. 与当前连接关联的事务已完成 但尚未处置。交易必须在之前处置 该连接可用于执行 SQL 语句。
  3. 网络数据包乱序:已接收[x],预期[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 
                        column1=@column1;";
        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 
                        column1=@column1,
                        column2=@column2;";
            cm.CommandText = commandText;
            cm.Parameters.AddWithValue("@column1", item.column1);
            cm.Parameters.AddWithValue("@column2", item.column2);

            cm.ExecuteNonQuery();

        }
    }
}

最佳答案

导入 MySQL 的最快方法是 INFILE,因此我建议创建一个 CSV 文件,然后将以下内容作为 SQL 语句运行。 请注意,我还没有完整的 C# 设置并对此进行了测试...但这就是我在希望快速完成时备份/恢复 MySQL 的方式...所以我假设当设置为“commandText”时可以运行以下命令"并在创建 CSV 文件并将其写入磁盘后运行。

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

来自https://dev.mysql.com/doc/refman/5.7/en/load-data.html “LOAD DATA INFILE 语句以非常高的速度将文本文件中的行读取到表中...”

关于c# - 如何在MySQL中批量插入记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38162326/

相关文章:

javascript - 如何将带有所需位置标记的 map 存储在文件中?

mysql - 如何在插入 MySQL 数据库之前以编程方式检查重复行

c# - Silverlight ComboBox 和 SelectedItem

如果数据库列中的值达到零值,则 C# 进行条件处理

c# - 从数据库中获取动态按钮花费的时间太长

MySQL:更新具有多个外键依赖关系的表

php - MySQL导入Excel工作表的奇怪问题

c# - 我怎么能对文字字符串参数施加约束

c# - protobuf-net 如何处理只读字段?

c# - 中性文化如何映射到 CultureInfo.CreateSpecificCulture 方法中的特定文化?