日期:2014-05-18  浏览次数:20379 次

请教一个db-library与链接服务器的诡异问题
使用的是sql2000数据库,安装过sp4补丁。
还有一个古老的用c++写的程序,会调用该数据库的一个存储过程,数据库访问使用的是db-library。
该过程其实是通过链接服务器查询另一个sql2000数据库中一张表的数据。比如:
SQL code
create procedure p_query_inf
as
select num from webserver.zhdb.dbo.numberinfo;
go

奇怪的是:这个过程写好,在查询分析器中执行没有任何问题,但该c++程序调用时就执行存储过程失败(错误原因不详,因为该程序很老了,基本没有熟悉的人)。
但是如果把c++程序访问的数据库和链接服务器指向的数据放在一台机子上,存储过程中不使用链接服务器程序变为这样
SQL code
create procedure p_query_inf
as
select num from zhdb.dbo.numberinfo;
go

那个古老的c++程序就调用该过程成功。所以我就怀疑是链接服务器的问题,可是我在查询分析器里使用跟c++程序访问数据库一样的用户,执行该过程就没问题啊。(查询出来结果集不大,就几百条)
真奇怪,请各位高手指点!

------解决方案--------------------
问题应该不出在C程序中。
1.检查链接服务的设置是否正常。链接服务器设置不正确可能会导致无法执行。比如说链接服务器是否有加端口,即使是1433,在连接时也要记得加上。
2.检查代码中是否有事务,如果有,那要注意配置分布式事务。具体可以百度查。
3。检查链接服务器的权限设置。
4。检查链接服务器的服务配置,是否有开户RPC,MSTDC等等。

最好是提供你的错误描述。

------解决方案--------------------
debug一下c++程序,应该有详细错误信息的.

靠猜很难搞定D.