【问题标题】:Uploading 100,000 rows into a SQL Server database将 100,000 行上传到 SQL Server 数据库
【发布时间】:2021-09-21 10:46:50
【问题描述】:

从 ASP.NET MVC 应用程序上传批量(超过 100,000 条记录)的最快方法是什么?

我尝试使用以下方法:

  1. BulkCopy 但我不断收到此错误:

消息:写入 CustomerUPLLimit 表时出错。
Microsoft.Data.SqlClient.SqlException (0x80131904):从服务器接收结果时发生传输级错误。 (提供者:Session Provider,错误:19 - 物理连接不可用)

  1. 使用实体框架InsertRangeAsync 但这需要很多时间。 30,000 条记录耗时 30 分钟

【问题讨论】:

  • 批量复制消息非常简单。它说它无法使用提供的连接字符串进行连接。
  • 那是连接字符串。它在尝试插入几条少于 1000 条的记录时有效,但在记录变大时失败

标签: sql-server asp.net-mvc sqlbulkcopy


【解决方案1】:

BULK INSERT 将是插入大量数据的非常快速的方法。

  1. 获取格式文件如下:
BCP DbName.SchemaName.TableName format nul 
-x -S ServerName -c -f c:\dev\TableFormat.xml -t, -T
  1. 现在,使用包含数据和格式文件的 csv 文件将 BULK INSERT 插入到表中。
BULK INSERT dbo.TableName
FROM 'c:\dev\TableData.csv'
WITH (FORMATFILE = 'C:\dev\TableFormat.xml');

【讨论】:

  • 我正在使用 EPPlus 从 excel 文件中获取数据。数据库也托管在与 Web 应用程序不同的服务器上
【解决方案2】:

我想推荐 EFCore.BulkExtensions here

context.BulkInsert(entitiesList);                 context.BulkInsertAsync(entitiesList);
context.BulkInsertOrUpdate(entitiesList);         context.BulkInsertOrUpdateAsync(entitiesList);      //Upsert
context.BulkInsertOrUpdateOrDelete(entitiesList); context.BulkInsertOrUpdateOrDeleteAsync(entitiesList);//Sync
context.BulkUpdate(entitiesList);                 context.BulkUpdateAsync(entitiesList);
context.BulkDelete(entitiesList);                 context.BulkDeleteAsync(entitiesList);
context.BulkRead(entitiesList);                   context.BulkReadAsync(entitiesList);
context.Truncate<Entity>();                       context.TruncateAsync<Entity>();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-09
    • 2021-12-02
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多