不知为何,我的程序远程连接数据库时经常会出问题,有时非常正常,速度和本地用户差不多,而有时则不管是查询还是更新都非常慢,甚至一天里还要出现几十次掉线的情况。掉线时有两种提示,
一是:超时已过期。
二是:运行时错误'-2147467259(80004005)' [DBENTLIB][ConnectionRead(recv()).]一般性网络错误。请检查网络文档。以下是我的连接语言,我是在主窗体里设置了一个全局的FwqSource ,然后其他所有的地方都用这里的,本来cn是定义在过程中的,需要时定义再打开,用完了就关闭,老是掉线后改成了全局的,在主窗体里就打开连接,关闭软件时才关闭连接,但这两种方法都会掉线。
    FwqSource = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=Name;password=Pass;Initial Catalog=SS;Data Source=" & ServerName
    cn.ConnectionTimeout = 200
    cn.Open MDIForms.FwqSource
    cn.CommandTimeout = 200
方法试了好多,掉线情况一直存在,情况好时一天可能就掉一两次,多时上百次,都要疯了
有请高手帮忙!!谢谢!

解决方案 »

  1.   

    在调试环境下,提示二出现在    rs.Open SQL, cn, adOpenKeyset, adLockOptimistic
    上,手动跳过后,再进行其他的数据库操作都提示连接失败。好像是cn被断开了,是否是我只共用一个cn连接的原因?但以前不共用一个cn,而是需要时才打开一个cn,用完了就关闭也是经常掉线,提示一和提示二都有。
      

  2.   

    把你的Timeout语句全部去掉,默认为30s,但其实如果连接不上在15s左右就有提示。
      

  3.   

    增加重新发送的功能,自行判断,如果错误,重新连接,就像FLASHGET一样,连接错误,再重新连接,直到连接正常为止。
      

  4.   

    保存时用事务控制,一个事务中的SQL操作要不全部执行,要不全部不执行