问题很诡异,有个服务程序a以及一个连接数据库的代理程序b
b通过ADO访问数据库,a向b发包通信取得数据库的数据.
至于为啥这样搞,因为a是跑在linux下的服务器程序.现在的情况是这样的:
b在一台windows2003server上,server上有个linux虚拟机,a在这个虚拟机里面
也就是a和b在同一个物理机器上.
这时a通过b取数据时候,就会报:[DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在或拒绝访问但如果把代理程序b放到一台别的电脑上去,就不会报这个错误.数据库是装在windows2003server上的,就是和服务程序a在一台电脑里(虽然a是在这个电脑的虚拟机里面的)测试了服务器的1433端口肯定是打开的,我看了网上一些别的解决方法,比如这里的:
http://www.hsun.cn/program/function/news/page_news_popup.php?news_id=180&styleID=005001&structureID=1030&topicID=152&channelID=12&channelName=channelName&topicName=topicName也都试过了,不管用啊....
好像网上所服务程序和客户程序在一台电脑上的时候有这种问题,可是解决方法都不明朗...

解决方案 »

  1.   

    是同一个网段的呢,这里还有个帖子呵呵,不过一样的问题:
    http://topic.csdn.net/u/20100916/14/843fa2c9-530b-4514-8593-22a8c0412533.htmla和b如果在两台服务器上,没问题;
    如果a和b同时都在数据库服务器那台电脑上,就报这样的错
      

  2.   

    2台主机可以ping通的呵呵,是这样,如果a和b在2台主机上,反而是正常的.但是如果a和b在同一台主机上,就会报这样的错误
      

  3.   

    b在一台windows2003server上,server上有个linux虚拟机,a在这个虚拟机里面
    也就是a和b在同一个物理机器上.
    我的意思是,linux虚拟机与 windows2003server 能是不能ping通?
    a,b在不同的主机上,分别的操作系统是什么?
      

  4.   

    linux虚拟机与 windows2003server 是可以ping通的呵呵.
    先是虚拟机上的服务程序a发包给b,b接收到a的指令后才会去访问数据库的,然后就报错了.这是a和b在同一台物理主机上的情况;
    如果把b丢到别的主机上去,则不会报这样的错.只有a和b在同一台物理主机上才会报错.
    2台电脑的系统都是2003server
      

  5.   

    我也google过,好像访问sqlserver和服务程序和客户程序在同一个电脑上时会有这样的问题,可是解决方案我都试过了,都不行啊