2016-11-07 112 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 –