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

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

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

При поиске решения проблемы я выяснил 4 важные вещи касательно 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. В строке подключения никаким образом не указать кодировку базы, т.к. у драйвера нет таких опций. Если база в windows-кодировке, драйвер будет ее упорно выдавать как западноевропейскую 1252. Единственное корректное решение, к которому я пришел - это преобразовывать кодировку, например, так:
    out_str = Encoding.GetEncoding(1251).GetString(Encoding.GetEncoding(1252).GetBytes(in_str))
    где in_str - это строка, полученная из базы.

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

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

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

14.06.18   Гость Встретился с такой же проблемой! Конектился я через Microsoft Jet OLE DB. Статья помогла разобраться. Спасибо!

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