我正在开发的应用程序中建立与AS / 400的ODBC连接。它只是DELETE
然后是INSERT
。没有什么疯狂或复杂的。我的64位Windows 7 Pro桌面上的一切都很好用(更新:不再是真的)但是当我尝试在我的32位笔记本电脑上运行应用程序进行演示时,我收到以下错误:
错误[S1C00] [微焦点] [伦巴数据访问] [S1023934]驱动程序没有 能。 SQLSetConnectOption错误[IM006] [Microsoft] [ODBC驱动程序 管理器]驱动程序的SQLSetConnectAttr失败错误 [01000] [Microsoft] [ODBC驱动程序管理器]驱动程序不支持 应用程序请求的ODBC行为的版本(请参阅 SQLSetEnvAttr)。错误[微焦点] [RUMBA数据 访问] [S1023934]数据源拒绝建立连接。 APPC Primary RC = Allocation_Error;中学RC = Allocation_Failure_No_Retry。
我不确定发生了什么。在32位笔记本电脑上设置DSN时我可能搞砸了一些东西,但它看起来与我在64位桌面上设置的完全相同...... 32位和64位之间有什么不同吗?版本还是有其他事情发生?
谢谢!
编辑:我刚刚在另一个64位桌面上尝试过,我得到了同样的错误。自从我几个月前在我的机器上进行设置以来,我设置DSN的方式肯定有问题,可能会遗忘。EDIT2:我在桌面上运行了Windows Update,其中一切正常,现在它也无法正常工作。有可能一个有问题的Windows Update可能导致我的问题吗?
EDIT3:我在评论中被要求启用跟踪并查看会发生什么。浏览它,这里有一些值得注意的消息:
退出SQLDriverConnectW,返回码为-1(SQL_ERROR)
和
退出SQLGetDiagRecW并返回代码100(SQL_NO_DATA_FOUND)
其他所有内容看起来都以状态0退出(SQL_SUCCESS)
答案 0 :(得分:1)
通过安装此Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package MFC Security Update来解决该问题。
根据微软的说法,
已发现一个安全问题,导致使用Visual Studio 2005构建的MFC应用程序中存在漏洞并发布Microsoft Visual C ++ 2005 Service Pack 1可再发行组件包。
为什么安装安全补丁(而不是错误修复补丁)解决了这个问题,这超出了我的范围......
答案 1 :(得分:0)
使用ODBC管理器,启用跟踪。尝试使用您的应用程序并查看SQL_ATTR_ODBC_VERSION的日志文件。你应该看到这样的东西:
odbct32w fc0-1ad0 ENTER SQLSetEnvAttr
SQLHENV 0x007A1DE0
SQLINTEGER 200 <SQL_ATTR_ODBC_VERSION>
SQLPOINTER 3 <SQL_OV_ODBC3>
SQLINTEGER 0
odbct32w fc0-1ad0 EXIT SQLSetEnvAttr with return code 0 (SQL_SUCCESS)
SQLHENV 0x007A1DE0
SQLINTEGER 200 <SQL_ATTR_ODBC_VERSION>
SQLPOINTER 3 <SQL_OV_ODBC3>
SQLINTEGER 0
不同之处在于你的SQL_ERROR而不是成功。检查第三个参数是什么(在我的例子中是SQL_OV_ODBC3
)。很可能你的应用程序设置的版本比你的ODBC驱动程序支持的版本更新。您需要避免使用较新的ODBC功能或将驱动程序升级到支持更高级别ODBC的驱动程序。