我写了一个存储过程,在查询分析器执行时执行正常,但用delphi执行时提示连接超时(我用的是ado),请问到底是什么原因和如何解决!!!

解决方案 »

  1.   

    关于在delphi中调用存储过程的隐患
    连接超时怎麽就是调用存储过程的隐患呢,一般情况下的超时有如下原因
    1.连接字符串无效,这个最常见,排除方法是在设计期连接看是否会出现超时的情况
    2.程序运行时使用了不同版本的连接数据库DLL,我在Win98下就曾经出现SQLServer的不同Dll的版本兼容问题
    3.网络速度特别慢,有这种情况时建议通过TCP/IP的方式连接
    另外提醒你的是
    Ado下使用存储过程是没有问题的,但不同的数据库使用存储过程的方法不相同,要注意其差别之处。
      

  2.   

    在下認真學習hhytsoft(雨中独行) 的分析,
    個人認為主要就是第一個﹐期它的在做項目的時候應該很難出現
      

  3.   

    :),不好意思,说隐患是为了吸引眼球。
    to hhytsoft(雨中独行) ,你说的情况
    1、连接字符串无效,这个最常见,排除方法是在设计期连接看是否会出现超时的情况
       也出现连接超时,但运行其他存储过程时执行正常(如果修改正在运行的存储过程本身变 成一个普通的查询,而去掉一些排序和一些运算,则也能正常执行);
    2、程序运行时使用了不同版本的连接数据库DLL,我在Win98下就曾经出现SQLServer的不同Dll的版本兼容问题
    我装了两个数据库(ms sql2000/7.0),所以这个是有可能的(我现在没有条件试,服务器也是ms sql2000/7.0),但应该如何解决呢?
    3、网络速度特别慢,有这种情况时建议通过TCP/IP的方式连接
    我公司的网络是100m的,并且我有的存储过程的运算和处理更复杂、数据量更大,也不存在超时,所以我想这个原因不存在。请你多指教
      

  4.   

    to DWGZ() :
       和ConnectionTimeOut无关,我已经试过了
      

  5.   

    从你反馈的情况看,应该不是连接不上的问题。我在这种情况下,曾经遇到的问题是在存储过程中使用了insert语句,导致出现递归触发器(需要事先设置,当时我的程序需要这样),然后触发器失败,导致存储过程超时(而不出现错误)。另外第二、三种情况你已经排除了。那你看看这样可以否。
    SET NOCOUNT ON   //如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。
    SET NOCOUNT OFF  //在实际要输出数据前,关闭不输出数据============================
    另外千万不要出现在触发器中出现锁定现象,否则存储过程永远也执行不外,但在查询分析器中则可以正确执行。
      

  6.   

    问题已经解决,需要去设置DataSet的ConnectionTimeOut,而不是设置adoConnection的ConnectionTimeOut。