我们公司有个产品是使用Sql Server的,很普通的结构,就是一台数据库服务器
N个客户端,N<5.最近经常有客户抱怨说某客户端连接不上Sql Server
我们技术人员过去一看的确是连接不上,然后尝试用Windows自带的ODBC建立连接使用在ODBC连接时选择TCP/IP连接有问题,使用Named Pipes尝试后能连接,这样测试连接成功后
我们的软件也能正常连接上SQL Server了。
可这样的情况有些客户是Named Pipes连接不上,TCP/IP却能连接
不知道是否有什么代码可以在程序尝试TCP/IP连接不上后在尝试Named Pipes连接?当然连接不上的偶尔也是因为客户的网线没插好,或者网卡被莫明其妙给禁用了,那么
是不是也有什么代码能检测到网卡状态和网络连接状态呢?经常发生这样的情况确实很浪费人力资源。请问各位有没碰到此类问题,能否提供个好的解决方法?

解决方案 »

  1.   

    估计我的内容描述的不准确,那分解为两个问题吧:1、有什么代码能返回网络连接状况,比如:如果网卡被禁用,返回网卡被禁用,网线没插好就返回网线没插好。2、有什么方法能让sql首先尝试TCP/IP方式连接服务器,尝试20秒,如果不行,再尝试使用Named Pipes 连接,再尝试20秒。如果不行再返回错误信息。
      

  2.   

    1. 可以先ping服务器,如果ping不到说明网络不通,就不用尝试什么Tcp/Ip或Named Pipes了TIdIcmpClient使用很方便2. 动态在ODBC中创建两个链接,一个是TCP/IP的一个是Named Pipes的,分别尝试两个连接动态创建ODBC连接可以修改注册表,具体键值和位置,用注册表监控器看看就ok
      

  3.   

    to postren(小虫) :就采用你这说法了,动态建立ADOCONNECTION对象,先尝试TCP/IP连接,如果不行就采用Named Pipes.