繁体   English   中英

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

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

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

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

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

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

使用MySqlConnector package 而不是 Oracle 的驱动程序。最流行的 EF 提供程序使用 package, Pomelo.EntityFrameworkCore.MySql与 Oracle 的 900K 下载相比,下载量为 22M。 与 Oracle 的 38M 相比,MySqlConnector 本身有 35M 的下载量。

MySqlConnector 允许通过其MySqlBulkCopy class 进行批量导入,其工作方式与 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 错误

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM