将CSV文件作为记录添加到sql server的有效方法

问题描述 投票:1回答:2

ASP.Net Core应用程序 - 读取CSV文件,并循环遍历每条记录以将其添加到数据库。

        using (var reader = new StringReader(publicScheduleData))
        using (var csvReader = new CsvReader(reader))
        {
            csvReader.Configuration.BadDataFound = null;
            csvReader.Configuration.MissingFieldFound = null;
            csvReader.Configuration.HeaderValidated = null;

            var records = csvReader.GetRecords<Qualys>();

            foreach (var item in records)
            {
                _context.Qualys.Add(item);
                await _context.SaveChangesAsync();
            }

        }

我知道您可以直接在SSMS中导入,但这必须是最终用户函数,才能从Web表单更新sql数据。

上面的方法似乎很慢 - 每秒写几条记录。我的CSV文件有90,000多行,26列。

有没有更快的方法将这些记录添加到数据库?

谢谢,马克

c# sql-server asp.net-core
2个回答
1
投票

如果将csv插入到数据表中,然后将其插入数据库,则应该可以获得更快的插入时间,因为您一次不执行单个插入操作。这个article可能会让你在路上。如果文章中的方法不适合您,我仍然建议将csv数据插入到数据表中,然后使用用户定义的表将数据作为参数插入到存储过程中,然后您可以执行并插入从用户定义的表中选择。


1
投票

较新版本的.NET Core支持SQLBulkCopy库。此库将允许您使用来自其他源的数据有效地批量加载SQL Server表。

这是一个跟随https://www.c-sharpcorner.com/article/bulk-upload-in-net-core/的例子

    using (var sqlCopy = new SqlBulkCopy(connString))  
        {  
          sqlCopy.DestinationTableName = "[Products]";  
          sqlCopy.BatchSize = 500;  
          using (var reader = ObjectReader.Create(prodlist, copyParameters)) 

           {  
                        sqlCopy.WriteToServer(reader);  
           }  
       } 
© www.soinside.com 2019 - 2024. All rights reserved.