2016-11-07 2 views
2

Привет, Я пытаюсь перенести некоторые проекты в ASP.Net Core и некоторые проблемы с тем, что является правильным способом загрузить файл .CSV в мою базу данных SQL.Импорт .CSV с использованием SqlBulkCopy с ASP.Net Core

В прошлом я загружал цикл содержимого .SSV через него и сохранял эту информацию в 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

'// карта индекса недвижимости в колонке индекс в таблице. в таблице базы данных первый столбец - это идентификационная колонка. Этот бит спас мне слишком много неприятностей. Спасибо, что нашли время, чтобы опубликовать ваши поисковые объявления –

Смежные вопросы