如何在C#应用程序中强制使用ODBC版本2.x

时间:2019-03-27 09:01:10

标签: c# odbc honeywell

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

尝试与霍尼韦尔系统通信。 它们不因共享数据而闻名-但是有大约15年前某人编写的ODBC驱动程序。 在Windows 2003服务器上运行并在Visual Studio 2005中(在同一服务器上)编译时,该应用程序可以工作。 在其他服务器上运行的同一应用程序:不起作用。 在任何其他计算机上编译的应用程序(x86):不起作用,不在旧服务器上,不在新服务器上。

System.Data.Odbc.OdbcConnection上找不到属性或方法,以设置要使用的ODBC版本。

目前,您不会在运行该应用程序时遇到“错误”: 它连接到dsn,并且用户已通过身份验证。 (更改用户名或密码会导致错误) -但没有任何数据。

对ODBS驱动程序的调用进行跟踪可以得出:

  

DIAG [IM006] [Microsoft] [ODBC驱动程序管理器]驱动程序   SQLSetConnectAttr失败(0)

     

DIAG [01000] [Microsoft] [ODBC驱动程序管理器]驱动程序没有   支持应用程序请求的ODBC行为版本   (请参阅SQLSetEnvAttr)。 (0)

     

....

     

DIAG [IM006] [Microsoft] [ODBC驱动程序管理器]驱动程序   SQLSetConnectAttr失败(0)

     

DIAG [HY096] [Honeywell] [ODBC驱动程序]信息类型超出范围(1043)

     

....

     

DIAG [HYC00] [Honeywell] [ODBC驱动程序]驱动程序不可用(1010)

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

1 个答案:

答案 0 :(得分:0)

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

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