Введение


Очень часто возникает задача конвертации данных из одной БД в другую, из внешнего файла разного формата в БД и наоборот. При этом типы данных внутри БД могут быть не только текстовые, но и бинарные (binary или varbinary). Бинарные и текстовые данные, как известно, в SQL Server Management Studio обрезаются и не выводятся полностью. В связи с этими недостатками пришлось написать свое приложение для конвертации данных в/из MSSQL на языке C# (.NET Framework 4.0). Приложение называется ImportExportDataSql и изначально он создавался именно для конвертации из бинарных полей БД в файлы, но потом функционал расширялся. Приложение портативное, без рекламы и не требует доступа в Интернет.

Возможности приложения


  1. Результат SQL-запроса выборки данных генерит данные в SQL-формате с проверкой наличия записи в таблице по указанному пользователем условию WHERE
  2. Несколько результатов SQL-запросов объединяются в один файл, если пользователь укажет в разных задачах одинаковое имя выходного файла
  3. Все настройки хранятся в XML файле
  4. Возможность запуска из консоли
  5. Быстрая загрузка/выгрузка в БД при работе с CSV
  6. Возможность загружать Excel-файлы в двух режимах
  7. Выполняются только отмеченные задачи
  8. Задачи, выполненные с ошибками подсвечиваются красным цветом, а без ошибок — зеленым. Сообщение об ошибке при этом выводится не только в лог, но и в виде всплывающей подсказки напротив строки, где возникла ошибка

Интерфейс приложения


При запуске приложения необходимо соединиться с БД.



После успешного соединения с БД отображается список задач.



Типы задач


Сохранить из БД в файл


Конвертация полей бинарных типов данных из БД в файл. Этот пункт выбирать нужно тогда, когда файлы хранятся в БД в бинарном виде и нужно эти файлы выгрузить на диск. При этом можно настроить имя выгружаемого файла, его ID и поле бинарного типа с содержимым файла, задав эти поля оператором SQL.

Сохранить из БД в файл (утилитой bcp)


Данный тип задачи предусматривает использование утилиты bcp. Результатом данного типа задачи будет BAT-файл и файл форматирования (с расширением fmt). BAT-файл можно по желанию изменить, что повышает гибкость. После запуска BAT-файла в текущем каталоге будут созданы файлы, скопированные из БД.



Сохранить из файла в БД


Файлы из указанной пользователем папки будут загружены в указанную таблицу и поле.



Сохранить из БД в скрипт SQL


Данным способом можно загрузить один файл, либо папку целиком, либо только список указанных файлов, либо оператором в SQL-запросе. Если будет установлена галочка «Имена полей в условии UPDATE», то SQL-запрос на выходе будет формироваться с проверками на существование записи, согласно этим полям по условию INSERT и UPDATE. Если же галочка «Имена полей в условии UPDATE» снята, то запрос будет генерироваться только на вставку записи (INSERT) без проверок существования записи.

Пример выгрузки SQL-запроса:



Из БД в скрипт SQL (только INSERT)


В отличие от типа задачи «Сохранить из БД в скрипт SQL» этот вариант следует использовать для сокращения текста SQL-запроса в котором применяется только оператор INSERT. Отметка «Имена полей в условии UPDATE» работает аналогично, как описано выше: в типе задачи «Сохранить из БД в скрипт SQL».

Из БД в скрипт SQL (только UPDATE)


В отличие от типа задачи «Сохранить из БД в скрипт SQL» этот вариант следует использовать для сокращения текста SQL-запроса в котором применяется только оператор UPDATE. Отметка «Имена полей в условии UPDATE» работает аналогично, как описано выше: в типе задачи «Сохранить из БД в скрипт SQL».

Статический скрипт SQL


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

Сохранить из Excel в скрипт SQL


Преобразует данные из Excel в SQL-скрипт, при чем можно указать не только имя файла и имя листа, но еще и номер строки с которой начать считывание и номер последней обрабатываемой строки. Тип обработки Excel-файла «Поиск по заголовку» будет выполнять выгрузку с поиском текста заголовка, который укажет пользователь, последовательность полей при этом не важна и её можно менять. Тип обработки Excel-файла «Конвертировать все значения ячеек в таблицу» предполагает задание нескольких обязательных полей: Номер строки, номер столбца, значение ячейки и необязательных полей: имя листа и имя файла. Это может быть удобно, когда в системе есть одна универсальная таблица с обязательными полями, перечисленными выше и вся обработка этой таблицы происходит хранимой процедурой или приложением.

Сохранить из БД в CSV


Простая выгрузка данных из БД в CSV с символом-разделителем «точка с запятой» и обрамлением строк символом двойных кавычек.

Сохранить из CSV в SQL


Похожа на выгрузку из Excel, но более расширена за счет параметров «Символ-разделитель», Код кодировки, «Пустые значения заменять на NULL» и «Количество строк в блоке». Файлы обрабатываются построчно, даже если они заняты другим приложением. Результат обработки записывается в SQL-файл по-блокам.

Сохранить из CSV в БД


Выгрузка происходит напрямую в БД очень быстро, по-блокам, за счет использования класса BulkInsert. Большие CSV файлы (в несколько Гб) могут загружаться в БД за несколько минут.



Дальнейший список доработок


  • Добавить функцию конвертации структуры БД, с проверкой существования объектов БД.
  • Добавить теги к задачам и фильтр по тегам.
  • Добавить возможность выбора формата SQL для генерации данных, чтобы можно было работать не только с MSSQL, но и с другими СУБД.

Вывод


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

Скачать Windows приложение ImportExportDataSql (бесплатно)
Сообщество VK для поддержки пользователей и желающих пообщаться с автором.