Проблема с разрядностью соединителя ODBC (я думаю) на Windows Server 2012

#mysql #odbc

#mysql #odbc

Вопрос:

У меня есть 32-разрядное приложение, которое использует файл UDL для подключения к базе данных MySQL на другом хосте. Этот 32-разрядный EXE-файл запущен на виртуальной машине Windows Server 2012 R2. Произошел сбой жесткого диска, и я перенастраиваю систему для подключения к базе данных, поэтому я знаю, что эта конфигурация не должна быть такой сложной.

Снимок того, что верно:

  • Установлен MySQL ODBC Connector (32-разрядный) 8.0.23.
  • Я создал соединение с уникальным DSN в 32-разрядной панели администратора ODBC.
  • Тестирование соединения через 32-разрядную панель администратора работает нормально (я вижу схему и т. Д.).

Вот где все начинает становиться подозрительным:

  • Когда я открываю файл UDL, который мое приложение использует для запуска соединения, 32-разрядные DSN не отображаются. Если я ввожу их вручную, я получаю ошибку «несоответствие архитектуры», которая, похоже, все согласны с тем, что на самом деле означает «несоответствие разрядности» (если я создаю 64-разрядный DSN, они отображаются и пингуют БД без проблем.)
  • Я нашел этот трюк для открытия файла UDL с помощью 32-разрядного драйвера ODBC:

OLEDB очень похож в том, что существует 32-разрядная версия и 64-разрядная версия провайдеров. Самый простой способ настроить и использовать источник данных OLEDB — создать файл .UDL в операционной системе. Двойным щелчком мыши на .Файл UDL вы увидите поставщиков OLEDB для 64-разрядной версии операционной системы, представленных в диалоговом окне свойств канала передачи данных. Чтобы перейти к 32-разрядной версии поставщиков OLEDB, вам необходимо выполнить следующую командную строку из командной оболочки.

C:Windowssyswow64rundll32.exe «C:Program Файлы (x86)Общие файлыСистемаOle DBoledb32.dll «,открывает slfile C:test.udl

… И это работает! Я вижу 32-разрядные именованные соединения. Кнопка «Проверить подключение» выдает удовлетворительный результат. Но когда я запускаю свое приложение, оно не подключается с использованием DSN / учетных данных файла UDL. Он ведет себя так, как будто все еще пытается вызвать 64-разрядную версию драйвера ODBC.

Если мои предположения верны, то как мне настроить приоритетность моего EXE-файла с использованием правильного (x86) 32-разрядного oledb32.dll ? Режим совместимости не устранил мою проблему, и у меня закончились «умные» идеи, чтобы попробовать.

Заранее спасибо за любые предложения!