CoderNotes - заметки программиста

Публикации  »  Базы данных, T-SQL
Скидка 65% на Skillbox

Получите скидку 65% на любой курс программирования на популярной образовательной платформе Skillbox!

Подробнее
Бесплатный хостинг + SSL-сертификат

Зарегистрируйте домен и получите 2 месяца бесплатного хостинга и SSL-сертификат на 1 год в подарок

Подробнее

Paradox и Непредвиденная ошибка драйвера внешней базы данных (11265)

Недавно мне пришлось писать программу на C# для конвертации данных из базы Paradox в другую, более современную. Как я выяснил, есть разные способы подключения к базе данных из C#, например, через Microsoft Jet OLE DB, или через Microsoft Paradox Driver, я выбрал второй способ. Строку подключения можно посмотреть на connectionstrings.com После удачного подключения через Microsoft Paradox Driver я пытался получить данные, но столкнулся с ошибкой "Непредвиденная ошибка драйвера внешней базы данных (11265)".

При поиске решения проблемы я выяснил несколько важных вещей касательно Paradox в Windows 7 64 bit:

  1. Для 64 разрядной системы нет драйверов для базы Paradox. В этом можно убедиться, зайдя в Панель управления - Администрирование - Источники данных (ODBC) и не увидев там драйверов для Paradox-а. Однако, если зайти в Источники данных (ODBC) через c:\Windows\SysWOW64\odbcad32.exe - то мы сразу увидим там кучу дополнительных драйверов, включая Microsoft Paradox Driver.
    Таким образом, я пришел к 1-му выводу: приложение должно работать в режиме 32 битного приложения чтобы оно увидело драйвера для Paradox-а. Для этого приложение нужно компилировать с флагом 32BIT, либо установить этот флаг на exe файл, например, с помощью .Net Tools.
  2. Нужно быть внимательным при написании строки подключения Microsoft Paradox Driver. В ней обязательно должен обязательно присутствовать пробел после *.db. Без этого пробела программа не сможет найти драйвер.
  3. После подключения к базе через Microsoft Paradox Driver я попытался выполнить запрос к базе и получил ошибку "Непредвиденная ошибка драйвера внешней базы данных (11265)". После долгих поисков в интернете я выяснил, что это происходит из-за того, что приложение не может создать в корне диска C: файл PDOXUSRS.NET. Напрашивался вывод, что приложение нужно запускать с администраторскими правами, чтобы она смогла писать в корень системного диска. Однако, как выяснилось, это не обязательно. Можно просто в BDE Administrator указать в Configuration\Drivers\Native\Paradox NET DIR другую папку для сохранения файла.
  4. Так же, необходимо, чтобы у пользователя были права на файл c:\Windows\System32\odbc32.dll (спасибо за помощь Владимиру в комментарии ниже)
  5. В строке подключения никаким образом не указать кодировку базы, т.к. у драйвера нет таких опций. Если база в windows-кодировке, драйвер будет ее упорно выдавать как западноевропейскую 1252. Единственное корректное решение, к которому я пришел - это преобразовывать кодировку, например, так:
    out_str = Encoding.GetEncoding(1251).GetString(Encoding.GetEncoding(1252).GetBytes(in_str))
    где in_str - это строка, полученная из базы.

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

Категория: Базы данных, T-SQL

Книги по теме:

Алан Бьюли

Изучаем SQL

Посмотреть все книги по программированию

Комментарии к статье:

14.06.18   Гость Встретился с такой же проблемой! Конектился я через Microsoft Jet OLE DB. Статья помогла разобраться. Спасибо!
18.02.19   Владимир И после всего этого программа все равно будет работать только под Админом! Полдня убил пока понял что нужно odbc32.dll в папке Виндовс дать полные права.
18.02.19   Администратор Спасибо за ваш комментарий! Добавил ваш совет в статью.
16.03.20   Гость Спасибо. Помогло разобраться с ошибкой 11265.
10.09.20   Евгений Встретился с такой же ошибкой - 11265 после перехода на 64-битную машину. Коннектился через Microsoft Jet OLE DB. Сделал одну вещь - настроил путь PDOXUSRS.net на доступную директорию C:\TEMP. Все заработало.

Добавить комментарий: