Как принудительно использовать ODBC-версию 2.x в приложении C #

#c# #odbc #honeywell

#c# #odbc #honeywell

Вопрос:

Odbc-драйвер имеет версию 2.x, но в Visual Studio используется версия 3.x . Нужно каким-то образом заставить приложение использовать версию 2.x Прямо сейчас, появляется ошибка: «Драйвер не поддерживает версию поведения ODBC, запрошенную приложением (см. SQLSetEnvAttr)». — но не находит способа сообщить приложению использовать другую версию

Пытаюсь установить связь с системой Honeywell. Они не известны тем, что обмениваются данными, но есть ODBC-драйвер, написанный кем-то около 15 лет назад. При запуске на сервере Windows 2003 и компиляции (на том же сервере) в Visual Studio 2005 приложение работает. То же приложение, запущенное на другом сервере: не работает. Приложение, скомпилированное (x86) на любой другой машине: не работает, ни на старом сервере, ни на новом.

Не находит свойств или методов в System.Data.Odbc.OdbcConnection , чтобы установить версию ODBC для использования.

На данный момент вы не получаете «ошибку» при запуске приложения: оно подключается к dsn, и пользователь аутентифицируется. (Изменение имени пользователя или пароля выдает ошибку) — но данные не извлекаются.

Выполнение трассировки для вызовов драйвера ODBS приводит к:

Сбой DIAG [IM006] [Microsoft] [ODBC Driver Manager] SQLSetConnectAttr драйвера (0)

DIAG [01000] [Microsoft] [Диспетчер драйверов ODBC] Драйвер не поддерживает версию поведения ODBC, запрошенную приложением (см. SQLSetEnvAttr). (0)

….

Сбой DIAG [IM006] [Microsoft] [ODBC Driver Manager] SQLSetConnectAttr драйвера (0)

Тип информации DIAG [HY096] [Honeywell] [ODBC Driver] вне диапазона (1043)

….

ДИАГНОСТИКА [HYC00] [Honeywell] [Драйвер ODBC] Драйвер не поддерживается (1010)

Итак, поскольку нет более нового драйвера для использования — мне нужно, чтобы мое приложение использовало ODBC 2.x — но оно по-прежнему использует ODBC 3.x.

Комментарии:

1. Вы можете установить источник данных ODBC в панели управления: Административные инструменты: Источник данных ODBC

Ответ №1:

Когда вы указываете VS C # подключиться к источнику данных ODBC, он незаметно подключается к ODBC с помощью Microsoft ADO.NET Поставщик ODBC, который хочет, чтобы все было таким же современным, как оно есть.

В этой ситуации лучше всего переключиться на другой ADO.NET Поставщик, который понимает, что у вас не всегда может быть новый драйвер ODBC, и сделает все возможное, чтобы перевести более новый C # ADO.NET При необходимости API обращается к более старым вызовам ODBC API. Мой работодатель предлагает несколько вариантов, один из которых — доступ к данным Enterprise Edition для источников данных ODBC, а другой — Virtuoso Universal Server Enterprise Edition (функционирующий как виртуальная СУБД), оба из которых доступны для немедленной загрузки с бесплатной временной лицензией, предоставляемой для вашего тестирования и оценки.