2016-11-07 119 views
2

您好我正在尝试将一些项目迁移到ASP.Net核心,并有什么是正确的方式将一个.CSV文件上传到我的SQL数据库的问题。使用SqlBulkCopy与ASP.Net核心导入一个.CSV核心

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

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

对任何想法开放。谢谢。

+0

试试这个库:https://github.com/borisdj/EFCore.BulkExtensions – borisdj

回答

1

我一直在使用FastMember's objectreader和和这样的columnmapping解决它:

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); 
      } 
     } 
+0

'//映射属性索引列表中的索引。在数据库表中,第一列是identitycolumn'这让我省了很多麻烦。感谢您花时间发布您的findnigs –