单个adoconnection 因网络不稳定导致的物理连接断开问题

来源:互联网 发布:淘宝买处方药药师回拨 编辑:程序博客网 时间:2024/05/01 22:33

delphi应用程序我一般用ADO进行连接,这方面涉及到好几个现象:
一、正常连接,程序启动后连接数据库,若连接条件都正常,软件很快就能连接成功。这个就不用说了;
二、连接失败。这方面包括数据库服务器不正常、应用程序连接参数错误等等,在连接过程中,会造成界面假死的现象,而且持续时间较长(我设置超时时间好像不起作用,如AdoConn.ConnectionTimeout := 10;)。最后弹出对话框说连接错误,并返回错误信息;这是让我很头疼的问题;
三、和数据库连接过程中,若物理连接断开,应用程序不会检测到,须手工处理。而软件向数据库提交select、Insert、Update、Delete等操作后,应用程序也会出现上面所述的那种情况。对连接检测的处理,我目前使用的方法如下代码所示:

 

因网络不稳定导致的物理链接断开 Tadoconnection.connected 还是为true 只有调用数据库时 无法链接上数据库

procedure TdmDBConn.AdoConnExecuteComplete(Connection: TADOConnection; RecordsAffected: Integer; const Error: Error; var EventStatus: TEventStatus; const Command: _Command; const Recordset: _Recordset);

var ErrNo : integer; ErrDetail,ConnStr : WideString;

begin

   if Error <> Nil then

   Begin

       ErrNo := Error.Number;

       ErrDetail := Error.Description;

       ConnStr := AdoConn.ConnectionString;

       if Pos('连接失败',ErrDetail) > 0 then

       Begin

           if GAgentSysParam.ServerConnDB = 1 then

           Begin

               AdoConn.Close ;

           End;

       End;

    End;

end;

 

1.只要服务器不正常 绝对出现假死现象,而且持续时间较长

2.Ip配置出错找不到 sqlserver 绝对出现假死现象,而且持续时间较长,而其他 DataBase的名称、用户名、密码出错 都可以 找到服务器。。快速匹配

因此,出现假死现象,而且持续时间较长  绝对是找不到SqlServer服务器,从而根据ado链接机制 重复尝试链接sqlserver服务器产生较长时间的假死现象 与frmMain.ADOConnection1.KeepConnection 属性无关