c# - mysql存储过程批量插入

标签 c# mysql bulkinsert bulk

我有一个看起来像这样的存储过程:

InsertItem: INSERT INTO (IN itemId INT, name TEXT);

有没有办法可以执行大部分操作? 就像而不是执行类似的事情:

using (MySqlConnection connection = new MySqlConnection(_connectionString))
{
    connection.Open();
    foreach (Item item in GetItems())
    {
        using (MySqlCommand command = new MySqlCommand("InsertItem", connection))
        {
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.AddWithValue("@itemId", item.ItemId);
            command.Parameters.AddWithValue("@name", item.Name);
            command.ExecuteNonQuery();
        }
    }
}

我正在尝试实现看起来像这样的代码,但没有成功:

using (MySqlConnection connection = new MySqlConnection(_connectionString))
{
    connection.Open();
    using (MySqlCommandBulk command = new MySqlCommand("InsertItem", connection))
    {
        command.CommandType = CommandType.StoredProcedure;
        for (Item item in GetItems())
        {
            MySqlCommandBulkItem bulkItem = new MySqlCommandBulkItem();
            bulkItem["itemId"] = item.ItemId;
            bulkItem["name"] = item.Name;
            command.BulkItems.Add(bulkItem);
        }
        command.Execute();
    }
}

我的观点是该命令将立即发送所有数据,并且不会单独发送每个查询。
有什么想法吗?

最佳答案

Dotnet 框架的 Oracle 连接器允许使用数组代替参数的标量。但 MySQL 连接器却没有。

有两种方法可以加速 MySQL 中的批量加载。

其中之一适用于 InnoDB 表,但对 MyISAM 表没有帮助。开始交易。然后,每隔几百行后,提交它并开始另一行。这将成批提交表插入,这比单独自动提交它们要快。

另一种是使用MySQL的LOAD DATA INFILE命令来获取数据文件并将其批量插入到数据库中。这非常快,但您必须认真正确地格式化文件。

关于c# - mysql存储过程批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34829095/

相关文章:

c# - 无法配置 'IApplicationBuilder UseOwin'

c# - 如何设置 C# 元素以将 css 从本地 .css 文件内联到 HTML 中? PreMailer.Net 可以做到这一点吗?

php - 如何在 Join Query 中删除具有相同 id 的重复行?

javascript - 如何清除asp.net MVC中文本框、下拉列表和复选框值中的值?

c# - 通过 C# 使用 I2C 设备

php - 无法根据从 php 列表框中获取的值获取 mysql 记录

mysql - 通过 char 数组指针存储的结构成员数据返回垃圾值

java - 使用 hibernate native 查询批量插入

php - 在 100 个文件中的 </body> 标签前批量插入代码

java - 如何使用 JDBC 中的PreparedStatement 在表中存储长值?