Home Menu Search

Saqwel

IT and other things blog

Кодировки в пакетах SSIS (DTSX) при использовании Microsoft Jet 4.0

Поделиться с друзьями

Недавно пришло распоряжение автоматизировать выполнение некоторых пакетов SSIS (DTSX), ранее выполнявшихся вручную. Вроде, всё легко и просто, создал в SQL Agent джоб, сказал джобу выполнять нужный пакет, всё вроде выполняется и работает, но с подвохом. Пакет производил выгрузку данных из файла DBF в таблицу на сервере SQL, в результате выгрузки в эту таблицу записывались данные в виде кракозябров. При выполнении пакета вручную или из Bussines Intelligent Development Studio, данные записывались русскими буквами. Загадка!!!

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

Поддержать автора

В итоге длительных изысканий по просторам интернета я наткнулся случайным образом на то, что, используемый для связи с файлом DBF в нашем пакете провайдер Microsft Jet 4.0 и является причиной проблемы. Точнее сказать не сам провайдер, а его взаимоотношения с BDE. Оказывается при использовании Microsoft Jet 4.0 самого по себе проблем не возникает и всё выгружается “по-русски”, но, если на компьютер, на котором выполняется пакет, установить BDE, то Microsoft Jet 4.0 начинает использовать драйверы BDE для связи с DBF файлами, поэтому и языковые настройки необходимо делать в BDE Administrator. Наличие BDE на компьютере Microsoft Jet 4.0 определяет по ветке в реестре HKLM\SOFTWARE\Borland\Database Engine. Чтобы MIcrosoft Jet 4.0 выгружал всё в нормальной кодировке можно использовать несколько приёмов:

  1. В BDE Administrator -> вкладка Configuration -> Drivers -> Native -> DBASE установить значение параметра LANGDRIVE=dBASE RUS cp866.
  2. Удалить BDE.
  3. Удалить (переименовать) запись в реестре HKLM\SOFTWARE\Borland.
  4. В некоторых конфигурациях всё выгружается без кракозябров даже если LANGDRIVER установлен не dBASE RUS cp866.

Leave a Reply