PI-SDK错误-2147220424的解决方法

Thursday, March 29, 2007

最近有不少人通过IM问我关于PI-SDK开发的问题,正好我也好久没有看了,把原来学习的时候写的一个利用PI-SDK读取snapshot和archive的例子拿出来重温了一下。调试运行结果竟然不通过,记得原来这个例子是OK的,看了以下错误出在Server对象的Open方法上,这个方法是用于连接数据库的。仔细看了SDK的文档,连接字符串的写法、用户名和密码均正确,但是就是连不上,每运行到这里就跑出异常-2147220424。异常提示“ServerID returned from server does not match that currently configured on this machine. The server at the path for the opened handle may have changed. ”我理解的大意是服务器的句柄变化,返回的ServerID和机器的当前配置不同。记起前几天把实验用的PI数据库重装过,难道是这个原因不成。但是怎么解决呢?文档和Google均没有找到好的答案。

首先,利用PI-API连接数据库,在权限允许的情况下,读写均没有问题,虽然PI-API和PI-SDK使用两套不同的登录方式,但是这样至少说明我的机器和数据库的连接是没有问题的。

接着,按照Troubleshooting PI client connection problems上的方法使用AboutPI-SDK对话框测试登录,结果仍然可以。但是回到程序就是不行。

最后,另外写了一个程序重新连接数据库,仍然报相同的错误,可能是因为Com组件的信息是保存在注册表,登录时仍然使用了以前保存的信息。既然猜想登录信息保存在注册表,那么直接去注册表中更改一下信息不是就好了,可惜不知道改哪里。

正在这是灵光一现,想着干嘛这么复杂。直接利用AboutPI-SDK对话框新建一个连接,再把原来的那个连接给删掉不是应该就可以删除注册表中的原来连接信息了吗?搞定。这个时候相同的程序,open方法使用相同的语句登录上了数据库。

估计这个是一个SDK的小BUG,如果以前连接过PI数据库、在PI数据库重装以后,必须更新本机的SDK在注册表中信息,更新方法很简单。使用AboutPI-SDK对话框新建一个连接,再把原来的那个连接给删掉。

0 COMMENTS: