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。
答案 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),这两个选项均可立即下载,并提供免费的临时许可证进行测试和评估。