Member 10714689 Ответов: 2

Как выполнить массовое копирование из csv-файла в SQL-таблицу с помощью C#, когда CSV имеет более ста столбцов?


Привет,
Я пытаюсь вставить тысячи записей из csv-файла в sql-таблицу.Мой csv-файл имеет более ста столбцов. Я нашел так много статей о массовом копировании sql. но в приведенных примерах есть 3 или 4 столбца макс. поэтому сопоставление столбцов csv со столбцами таблиц базы данных - это большая головная боль в моем случае.Plz кто-нибудь посоветует мне, как выполнить массовое копирование, когда csv имеет несколько столбцов.

статьи, которые я нашел
SqlBulkCopy-массовая вставка записей и обновление существующих строк, если запись существует с помощью C# и VB.Net[^]

Что я уже пробовал:

Я пытаюсь вставить тысячи записей из csv-файла в sql-таблицу.Мой csv-файл имеет более ста столбцов. Я нашел так много статей о массовом копировании sql. но в приведенных примерах есть 3 или 4 столбца макс. поэтому сопоставление столбцов csv со столбцами таблиц базы данных - это большая головная боль в моем случае.Plz кто-нибудь посоветует мне, как выполнить массовое копирование, когда csv имеет несколько столбцов.

CHill60

Раздел" Что я пробовал: "предназначен для кода, который вы используете.
Сопоставление столбцов с CSV может быть головной болью, но, по крайней мере, вам нужно сделать это только один раз.
Можно транспонировать заголовки из CSV-файла с помощью Excel и генерировать код в этой электронной таблице excel. Я успешно написал тысячи строк картографического кода, используя эту технику в считанные мгновения.

PIEBALDconsult

Посмотрите на SSIS или другие инструменты ETL.
Или использовать ADO.net -система. данные.Классы OleDb - с движком ACE для чтения CSV как базы данных.

2 Ответов

Рейтинг:
2

PIEBALDconsult

Я использовал утилиту BCP, SqlBulkCopy и ADO.net чтобы сделать ETL-работу в прошлом, но я провел последние пять лет, делая ETL-работу с SSIS-причем все больше и больше ее было из CSV-файлов.

Один главный урок, который я усвоил за последние двадцать лет (и я помню, что другие участники этого сайта говорили то же самое):
Не пытайтесь конвертировать данные из текста в другие данные во время начального процесса ETL. Сначала введите данные в базу данных (в виде текста), а затем выполните дальнейшую обработку.

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


Рейтинг:
1

Maciej Los

То, как вы используете BulkCopy на нескольких столбцах не отличается от BulkCopy на нескольких столбцах, но...

Вы должны использовать ADO.NET[^] - Для oledb[^].

Как?


  1. Создавать schema.ini файл, в котором вы должны определить количество столбцов
    Видеть:
    Схемы.ini-файл (текстовый файл драйвера ) | Майкрософт Документы[^]
    Как добавить определение схемы в источник данных текстового файла[^]
    Много шума из-за текстовых файлов[^]
    Мой прошлый ответ с образцом кода: Чтение Определенных Столбцов Текстового Файла[^]
  2. Создавать Метод oledbconnection[^] и Объект oledbcommand[^]
  3. Воспользуйся OleDbReader[^] к Загрузка[^] данные в DataTable
  4. Теперь подключите вашу программу к базе данных Sql server и скопируйте данные с помощью Класс SqlBulkCopy[^]


Вот и все!

Для получения более подробной информации, пожалуйста, смотрите:
ADO.NET примеры кода[^]