Эффективный способ добавить файл CSV в виде записей на сервер SQL - PullRequest
1 голос
/ 17 апреля 2019

Приложение 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, но это должно бытьфункция конечного пользователя, для обновления данных sql из веб-формы.

Вышеуказанный метод кажется очень медленным - запись нескольких записей в секунду.Мой CSV-файл содержит более 90 000 строк и 26 столбцов.

Есть ли более быстрый способ добавить эти записи в базу данных?

Спасибо, Марк

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Новая версия .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);  
           }  
       } 
1 голос
/ 17 апреля 2019

Если вы вставите CSV-файл в таблицу данных, а затем вставите его в базу данных, вы получите гораздо более быстрое время вставки, поскольку вы не выполняете ни одной вставки за раз.Эта статья может помочь вам в этом.Если подход, описанный в статье, не работает для вас, я все же предложил бы вставить данные CSV в таблицу данных, а затем использовать пользовательскую таблицу, чтобы вставить данные в качестве параметра в хранимую процедуру, а затем вы можете сделать это и вставить с помощьювыбор из пользовательской таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...