Импортировать текстовый файл в общую базу данных с помощью SQL

В настоящее время я пытаюсь импортировать текстовый файл с разделителями с запятой в базу данных на C#, используя OleDb, где я не знаю тип (SQL Server, Access, Oracle, MySQL, postgreSQL и т. д.). В настоящее время я читаю в файл в качестве базы данных с помощью средства чтения текста Jet, затем создает подготовленный оператор вставки, заполняет поля и в конце фиксирует. Хотя это работает, это медленно и занимает слишком много времени для миллионов строк.

Итак, мой вопрос: есть ли у кого-нибудь другие мысли о том, как лучше всего импортировать текстовый файл в общую базу данных, или комментарии к моим подходам, которые приведут к более быстрому импорту?

Я не могу использовать сторонние библиотеки или программное обеспечение для этого, поскольку это часть более крупного проекта.

Где конкретно у вас проблемы? Вопрос довольно общий. Проблема с объединением данных без ключа? Или проблема в механике использования набора данных. Также - не уверен, что вы имеете в виду, загружая пустую базу данных в набор данных.

Ken 07.10.2008 00:10

Я пытаюсь найти лучший способ получить данные из текста в базе данных, тип которой я не знаю. Если слияние - лучший способ, как это сделать без ключа.

Fry 07.10.2008 00:30
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
2
7 989
5

Ответы 5

Лучше всего купить готовое приложение для этого.

Профессиональные готовые приложения используют собственные драйверы и точно настраиваются для каждого типа источника данных, с которым они столкнутся. Это всегда под прикрытием, поэтому вы не видите, как они это делают. Например, массовое копирование используется против SQL Server; У Oracle есть Data Pump.

Проблема с развертыванием собственного заключается в том, что вы можете либо потратить деньги на точную настройку своего приложения для работы с каждым из типов источников, с которыми вы, вероятно, столкнетесь, либо сильно снизите производительность, используя общие драйверы ODBC / ADO / Whatever. .

В конце концов, вам лучше либо исключить это из своего продукта, либо просто иметь дело с неизбежным медленным подходом, который вы вынуждены использовать. В данном случае это означает использование отдельных операторов вставки для всего.

Итак, сколько у вас денег на ресурсы для разработки?

К сожалению, это зелье гораздо более крупной программы, так что это не вариант.

Fry 07.10.2008 00:07

См. Мой комментарий к Irongoofy, я на самом деле делаю это, но это уловка, и я пытаюсь сделать это быстрее

Fry 07.10.2008 06:21

Попробуй это

http://filehelpers.sourceforge.net

.... зачем вам загружать базу данных в набор данных? Попросите другую базу данных отслеживать уникальность (если есть такое слово). Во время импорта проверьте, существует ли в базе данных журналов, если нет, то загрузите в Generic Database.

Подождите, пока не появятся другие ответы на эту тему, возможно, мы получим лучшее представление.

Я хочу загрузить оба в базу данных, чтобы они были одного формата, конечной целью было бы загрузить текст в набор данных, скопировать его в набор данных db, а затем вставить эти данные в базу данных.

Fry 07.10.2008 00:27

Не совсем элегантно, но производительность может быть лучше:

  • загрузить весь файл в таблицу с одним столбцом «Строка» в виде длинного текста (аналогично тому, что вы делаете сейчас локально
  • использовать хранимые процедуры для разделения полей и создания вставок
  • выполнить вставки на сервере

Пока вы все еще вставляете каждую строку по отдельности, вы не создадите такой большой сетевой трафик.

Чтобы уточнить, исходный метод генерирует операторы на клиенте, а затем выполняет их на клиенте, что приводит к сетевому трафику для каждой строки. Я предлагаю сгенерировать операторы на сервере (в хранимой процедуре) и выполнить их на сервере, не создавая нового сетевого трафика.

«Правильным» решением было бы использовать специальный инструмент импорта для базы данных (например, SQL Loader для Oracle). Прирост производительности огромен. (Мы загружаем огромные таблицы с 20 миллионами строк примерно за 5 минут). Но, конечно, это не очень типично.

Верно, это было бы «правильным» решением, и это действительно то, что я делаю, но мне нужен универсальный инструмент, который работает со всеми базами данных в случае возникновения ошибки или отсутствия поддержки. Похоже, ваше недовольство составляет прибл. чем я сейчас занимаюсь, вы можете указать на различия?

Fry 07.10.2008 01:44

Подготовленные операторы и сохраненные запросы выполняются в этом контексте одинаково. Хотя оператор создается на клиенте, как только выполняется Prepare (), он обрабатывается как сохраненный запрос на сервере.

Fry 09.10.2008 21:34

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

Dataset.Tables[x].ImportRow(DataRow)

Конечно, теперь нужно просто заставить DataAdapter.Update (Dataset) работать. Будет весело искать в Интернете ...

Обновлять

Этот метод не дает более быстрых результатов, поскольку команда DataAdapter.Update выполняет построчную вставку.

НАСОСНАЯ ВСТАВКА dbo.ImportTest ОТ 'C: \ ImportData.txt' С (FIELDTERMINATOR = ',', FIRSTROW = 2)

Это похоже на SQL Server

Fry 29.05.2009 20:41

Другие вопросы по теме