使用SqlBulkCopy使用ASP.Net Core导入.CSV

时间:2016-11-07 16:51:12

标签: asp.net-core sqlbulkcopy

您好我正在尝试将一些项目迁移到ASP.Net Core,并且在将.CSV文件上传到我的SQL数据库的正确方法方面存在一些问题。

过去我会通过它上传.CSV文件循环并将该信息存储在DataTable中,然后简单地执行SqlBulkCopy.WriteToServer,但我发现当前在.Net Core中没有DataTable对象。 SQLBulkCopy接受DbDataReader而不是DataTable。

让这个工作的最佳方法是什么。我上传了文件,我可以使用我需要的内容来获取正确格式的数据,以便上传到我的SQL数据库。

对任何想法持开放态度。感谢。

1 个答案:

答案 0 :(得分:2)

我使用FastMember's objectreader解决了这个问题,并使用了这样的列映射:

   
 List<Data> lstData = new List<Data>();
        //fill list of data..

        using (var sqlCopy = new SqlBulkCopy(Config.get("Data:db:ConnectionString")))
        {
            sqlCopy.DestinationTableName = "[tblBulkCopy]";
            sqlCopy.BatchSize = 500;

            //map property index to column index in table. in database table the first column is the identitycolumn
            sqlCopy.ColumnMappings.Add(0, 1);
            sqlCopy.ColumnMappings.Add(1, 2);
            sqlCopy.ColumnMappings.Add(2, 3);

            var records = lstData.Select(obj => new { col1 = obj.number1, col2 = obj.number2, col3 = obj.number3 });

            using (var reader = ObjectReader.Create(records, new[] { "col1", "col2", "col3" }))
            {
                sqlCopy.WriteToServer(reader);
            }
        }