我的vb+sql2000 c/s程序,为何只要没有数据库操作,就会断开连接呢?
我写的连接串如下:
connstring = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=mydb;Data Source=dbserver;Password=000000;"这个程序用了几年了,没有问题,但是最近在一台个别的机器上出现问题,表现在,如果操作者连接进行数据库操作,不会断网,但是如果有2分种不动机器,再操作时,就会断开连接,我一直找不到原因。但是如果操作者连接操作,多长时间也不会断,如果断开数据库连接后,又需要退出程序,重新登录一次才行。
另外,上互联网始终正常,就是连接数据库存在问题。
我的程序是,登录时创建与数据库的连接,然后所有操作共享这个连接。还有一个线索,就是假如我运行两个程序,两个exe,用户在一个程序中连接操作,另一个程序的数据库连接也不会断。

解决方案 »

  1.   

    以下是我程序中用到的,两个连接子程序'--------------------------------------
    '功能:获取连接
    '--------------------------------------
    Public Sub getConn()    '获取连接子程序,在主窗体的load事件中调用该函数
        '如果不处于连接状态,则进行连接
        On Error GoTo gherr
        If conn.State <> adStateOpen Then
            'MsgBox "link ..."
            With conn
                .ConnectionString = connstring
                .ConnectionTimeout = 60
                .CursorLocation = adUseClient
                .Open                                    '连接
            End With
        End If
        Exit Sub
    gherr:
        MsgBox "执行getconn时出错!" & vbCrLf & Err.Description
    End Sub
    '连接数据库,正常时返回真
    Public Function getlink() As Boolean        '连接数据库,正常返回真
        '如果不处于连接状态,则进行连接
        'conn是全局对象
        On Error GoTo gherr
        If conn.State <> adStateOpen Then
            With conn
                .ConnectionString = connstring
                .ConnectionTimeout = 60
                .Open                                    '连接
            End With
        End If
        If conn.State = adStateOpen Then
            getlink = True
        Else
            getlink = False
        End If
        Exit Function
    gherr:
        getlink = False
        MsgBox "执行getLink时出错!" & vbCrLf & Err.Description
    End Function
      

  2.   

    也许是系统问题,也许是硬件问题,很多时候换一个网卡换、一个插口就能解决。
    如果中断时间是相对固定的话,而又找不出原因,又不想重做系统,
    只能在窗体中加一个timer控件 每隔1分钟执行一次查询操作
    conn.Execute "SELECT GETDATE()"
      

  3.   

    不一定是数据库的问题,你以前可以现在不可以了,可能问题出在其他问题上,比如问问管网络的部门,有没有修改防火墙、网络设备等方面的设置,可能防火墙,负载均衡等网络设备不允许长连接,timeout时间变短了。
    最好的建议就是写一个公用的连接数据库的方法,即用即连即关。