好久没有更新文章了,最近实在太忙,太乱。当然其中和DB2脱不了干系。今天就讲其中的两个大问题吧:
1、DB2 64位机器的安装问题。
若要在64位的机器上,连接DB2,自然需要安装一个db2 runtime client。然而,这样的安装也是有猫腻的。弱DB2客户端程序是64位,你当然可以安装db2 runtime client for 64bit。但若,你要开发或运行32位的DB2客户端程序,则千万千万要安装db2 runtime client for 32bit。否则,相关动态库就会缺失(如IBM.DB.DATA.DLL),导致一系列稀奇古怪的错误。
倘若,你已经安装了db2 runtime client for 64bit,后悔莫及。幸运的话,你能将其卸载。但是,卸载后,再装db2 runtime client for 32bit时,就很有可能安装失败。提示,大约是对注册表的更新失败。要解决这个问题,只能是暴力的把这个键值备份后,删除。然后继续安装,差不多就能成果了。这样的操作,如果没有对你系统其它软件产生影响的话,那就不用管了。若是,导致其它软件出错,那就只能重装软件了哦。
太折腾了。事后想想,DB2的NET下,会根据编译目标的不同,而去寻找对应的DLL。如果,你要编译x86的程序,则你的Program Files (x86)\IBM\SQLLIB\BIN\netf20下一定要能找到IBM.Data.DB2.dll。如果你要编译x64的程序,则你的Program Files\IBM\SQLLIB\BIN\netf20下一定要能找到IBM.Data.DB2.dll。
2、DB2在.net里被中断,报错: [DB2/NT] SQL0952N 由于中断,处理被取消 SQLSTATE=57014
在DB2的开发过程中,今日运行了一个较为复杂的sql语句。使用DB2服务端的控制台,运行该sql大约需要1分钟左右。而,在.net下,开发的程序里,运行30秒后,就被打断了,爆出异常 [DB2/NT] SQL0952N 由于中断,处理被取消 SQLSTATE=57014。找了网上好多的资料,都没有结果。只在一篇ADO开发DB2的文章里找到了线索:
我们开发时,只注意到了connection的连接时长。事实上,connection过期时间属性,已经被设置为0了,且只读。所以默认是永不过期的。
而对于我们每次SQL语句的执行,事实上是和DB2.DBCommand直接相关的。有意思的是,DBCommand也有个CommandTimeout 属性,且可读可写。将其设置为0后,就不会爆出处理被中断的问题了。呵呵!
就说这两点,以后有问题再补上。但愿,不要出问题了,DB2的开发资料实在太少