1

Odbc-driver 是 2.x 版,但在 Visual Studio 中,使用的是 3.x 版。需要以某种方式强制应用程序使用版本 2.x 现在,出现错误:“驱动程序不支持应用程序请求的 ODBC 行为版本(请参阅 SQLSetEnvAttr)。” - 但无法告诉应用程序使用其他版本

试图与霍尼韦尔系统通信。他们不以共享数据而闻名 - 但有一个 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 Driver Manager] 驱动程序不支持应用程序请求的 ODBC 行为版本(请参阅 SQLSetEnvAttr)。(0)

……

DIAG [IM006] [Microsoft][ODBC Driver Manager] 驱动程序的 SQLSetConnectAttr 失败 (0)

诊断 [HY096] [霍尼韦尔][ODBC 驱动程序]信息类型超出范围 (1043)

……

诊断 [HYC00] [霍尼韦尔][ODBC 驱动程序]驱动程序不支持 (1010)

因此,由于没有更新的驱动程序可供使用——我需要我的应用程序使用 ODBC 2.x——但它仍然使用 ODBC 3.x。

4

1 回答 1

0

当您告诉 VS C# 连接到 ODBC 数据源时,它会使用 Microsoft ADO.NET ODBC 提供程序无形地桥接到 ODBC,它希望所有内容都保持最新状态。

在这种情况下,您最好的选择是切换到其他 ADO.NET 提供程序,该提供程序了解您不能总是拥有新的 ODBC 驱动程序,并且会尽力将较新的 C# ADO.NET API 调用转换为较旧的 ODBC API 调用必要时。我的雇主提供了几个选项,一个是Enterprise Edition Data Access for ODBC Data Sources,另一个是Virtuoso Universal Server Enterprise Edition(用作虚拟 DBMS),两者都可以立即下载,免费为您的测试和评估提供的临时许可证。

于 2019-03-27T19:07:06.700 回答