C# MySQL 库是否与 SQL SqlBulkCopy class 等效?

Does the C# MySQL library have an equivalent to the SQL SqlBulkCopy class?

我知道有 MySqlBulkLoader,但它不是等价物,因为它无法从内存发送数据并且需要一个文件。

这对我来说是个大问题,因为我想从一个已经做了很多 I/O.[=19 的程序中批量插入大量数据到 MySQL 数据库中=] 我不能再将数百万行写入一个文件,然后让 MySqlBulkLoader 再次读回它们,当我已经将它们存储在内存中时,这是没有意义的。

为什么没有直接从内存而不是使用磁盘上的文件的选项?

我怀疑你用的是 Oracle 的 Connector/NET。该库有几个问题,主要围绕 async/await 和 Entity Framework 支持,但其中之一是有限的批量加载支持。 MySQL 允许从标准控制台批量加载。

使用 MySqlConnector package. That package is used by the most popular EF provider, Pomelo.EntityFrameworkCore.MySql 而不是 Oracle 的驱动程序,下载量为 22M,而 Oracle 的下载量为 900K。与 Oracle 的 38M 相比,MySqlConnector 本身有 35M 的下载量。

MySqlConnector 允许通过其 MySqlBulkCopy class which works similarly to SqlBulkCopy and accepts both DataTable and DataReader 输入批量导入。

var dataTable = GetDataTableFromExternalSource();

// open the connection
using var connection = new MySqlConnection("...;AllowLoadLocalInfile=True");
await connection.OpenAsync();

// bulk copy the data
var bulkCopy = new MySqlBulkCopy(connection);
bulkCopy.DestinationTableName = "some_table_name";
var result = await bulkCopy.WriteToServerAsync(dataTable);

MySqlConnector 的核心API 与Connector/NET 相同。还有一个 migration guide 解释了差异。本指南包括 MySqlConnector

中已修复的 Connector/NET 个错误