最近使用DB2 .NET Data Provider访问DB2报了reason code 10,解决废了很大力气,记录一下

错误现象

SQL1159 Initialization error with DB2 .NET Data Provider, reason code 10, tokens 9.5.0, 9.5.2  

错误分析

SQL1159表明错误是在DB2 .NET data provider(IBM.Data.DB2.dll)初始化过程发生的

DB2 .NET data provider初始化过程中会对可用性进行自检,其中一项检查则是对DB2 native client library(db2app.dll)调用测试,reason code 10则表示db2app.dll与IBM.Data.DB2.dll无法匹配。出现reason code 10会附带返回两个tokens,也就是错误信息reason code 10, tokens 9.5.0, 9.5.2  中的tokens 9.5.0, 9.5.2 。第一个token 9.5.0表示db2app.dll版本号,第二个token9.5.2表示IBM.Data.DB2.dll版本号。此时解决方法就是使用版本号一致的db2app.dll和IBM.Data.DB2.dll。

本地项目有了些年头,DB2 .NET Data Provider32位、64位版本从9到11都有,调用时没注意使用了不同版本。

错误处理

重新引用DB2 .NET data provider版本。使用DB2 .NET data provider安装目录C:\Program Files (x86)\IBM\SQLLIB\BIN下的两个dll,其中db2app.dll位于C:\Program Files (x86)\IBM\SQLLIB\BIN,IBM.Data.DB2.dll位于对应.net版本的C:\Program Files (x86)\IBM\SQLLIB\BIN\netfx.x目录,例如.net framwork3.5程序引用C:\Program Files (x86)\IBM\SQLLIB\BIN\netf20下的IBM.Data.DB2.dll。重建引用后reason code 10解决。

错误扩展

如果 reason code 10返回的db2app.dll版本号为0.0.0,即错误信息 reason code 10, tokens 0.0.0, 9.5.2 。该错误表示db2app.dll在初始化过程中遇到错误,错误原因有两个

1.程序引用的db2app.dll与本地安装的版本不匹配,此时检查调用版本与安装版本

2.db2app.dll在初始化时遇到权限问题,此时提升程序运行权限或者将程序调用用户加入DB2ADMNS 和 DB2USERS 用户组

组件引用扩展:

引用处理不当还会引发reason code 2、reason code 3问题,可能情况有以下几个

1.缺少db2app.dll

db2app.dll不能直接引用,不能加入到GAC中,调试时提示缺失时需要手动复制该文件到程序生成目录XXX\bin,注意是bin目录而非bin\Debug

2.64位与32位不兼容,64位的DB2 native client library文件为db2app64.dll

3.主程序及程序相关引用组件的32位与64位也要与DB2 .NET data provider统一,仅仅在调试时由Any CPU配置切换x86不一定解决问题,主程序及相关引用组件属性也切换为x86

posted on 2022-11-14 10:39  执古之道  阅读(378)  评论(0编辑  收藏  举报