![](/img/trans.png)
[英]C# Efficiently delete 50000 records in batches using SQLBulkCopy or equivalent library
[英]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.