gpt4 book ai didi

.NET Core WebApi CSV文件解析并存储在数据库中

转载 作者:行者123 更新时间:2023-12-02 02:55:35 26 4
gpt4 key购买 nike

我正在使用 .NET Core WebApi 和 EF Core。

我有以下情况:

  • 我有一个接受 CSV 文件的端点
  • 此 CSV 文件包含超过 15,000 行
  • 我需要解析此 CSV 文件并将每一行存储在我的数据库中
  • 在存储每一行​​之前,我需要检查里面的数据是否已经存在(每行需要检查 4-5 个值是否作为独立实体存在)

我的问题:

  1. 检查数据是否存在需要很长时间(15.000 次 4-5 次检查...)

所以我想创建一些任务来将批处理存储在数据库中(但在 .NET Core WebApi 中),你无法运行后台任务,对吗?

你们将如何实现这一目标?

最佳答案

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

  1. 创建临时表
await connection.ExecuteAsync(@"CREATE TABLE #TempTable
(
[X] int NULL,
[Y] nvarchar(100) NULL,
[Z] datetime NULL
)", null, transaction);

  • 创建DataTable并填充 CSV 数据
  • 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);

  • 执行批量复制
  • using (var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.Default, transaction))
    {
    bulkCopy.DestinationTableName = "#TempTable";
    bulkCopy.EnableStreaming = true;

    await bulkCopy.WriteToServerAsync(dataTable);
    }
  • 将临时表中的数据查询到目标表中。 您可以在此处执行现有记录检查
  • 删除临时表
  • await connection.ExecuteAsync("DROP TABLE #TempTable", null, transaction);

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

    关于.NET Core WebApi CSV文件解析并存储在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61205204/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com