是否c# MySQL库有一个相当于SQL SqlBulkCopy类?



我知道有MySqlBulkLoader,但它不是等效的,因为它不能从内存发送数据,需要一个文件。

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

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

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

使用MySqlConnector包代替Oracle的驱动程序。最受欢迎的EF提供商Pomelo.EntityFrameworkCore.MySql使用该软件包,其下载量为2200万次,而Oracle的下载量为900K。与Oracle的38M相比,MySqlConnector本身有35M的下载量。

MySqlConnector允许通过MySqlBulkCopy类进行批量导入,该类的工作原理与SqlBulkCopy类似,并接受DataTable和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相同。还有一个迁移指南解释了这些差异。本指南包括在MySqlConnector

中修复的Connector/NET错误。

最新更新