首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET核心WebApi CSV文件解析及数据库存储

.NET核心WebApi CSV文件解析及数据库存储
EN

Stack Overflow用户
提问于 2020-04-14 10:07:38
回答 1查看 2.7K关注 0票数 2

我使用的是.NET核心WebApi和EF核心。

我有以下情况:

  • 我有一个端点,它接受CSV文件
  • 这个CSV文件包含超过15.000行
  • 我需要解析这个CSV文件并将每行存储在我的数据库中。
  • 在存储每一行之前,我需要检查其中的数据是否已经存在(如果数据作为独立实体存在,则需要检查4-5值/行)。

我的问题:

  1. 如果存在数据,则检查需要很长时间(15.000次4-5次检查.)

因此,我想创建一些任务来将批处理存储在DB中(但在.NET Core WebApi中),您不能运行后台任务,对吗?

你们是怎么做到的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-14 10:22:30

一种方法是使用SqlBulkCopy将数据上传到临时表中,然后将数据查询到适当的表中。例如:

  1. 创建临时表
代码语言:javascript
复制
await connection.ExecuteAsync(@"CREATE TABLE #TempTable
(
    [X] int NULL,
    [Y] nvarchar(100) NULL,
    [Z] datetime NULL
)", null, transaction);
  1. 创建DataTable并使用CSV数据填充
代码语言:javascript
复制
DataTable table = new DataTable();

dataTable.Columns.Add("X", typeof(int));
dataTable.Columns.Add("Y", typeof(string));
dataTable.Columns.Add("Z", typeof(DateTime));

//foreach csv record...

var row = dataTable.NewRow();

row["X"] = 1;
row["Y"] = "test";
row["Z"] = DateTime.Now;

dataTable.Rows.Add(row);
  1. 执行批量复制
代码语言:javascript
复制
using (var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.Default, transaction))
{
    bulkCopy.DestinationTableName = "#TempTable";
    bulkCopy.EnableStreaming = true;

    await bulkCopy.WriteToServerAsync(dataTable);
}
  1. 将数据从临时表查询到目标表。--这是您可以执行现有记录检查的地方,
  2. 放置临时表
代码语言:javascript
复制
await connection.ExecuteAsync("DROP TABLE #TempTable", null, transaction);

我发现这种方法比EF要快得多,可以将数据批量导入数据库,同时维护一些业务逻辑。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61205204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档