最近使用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
标签:10,code,dll,reason,db2app,DB2,Data From: https://www.cnblogs.com/zhiguzhidao/p/16888278.html