TADOConnection如何测试连接数据库超时的解决办法
TADOConnection如何测试连接数据库超时的解决办法
Unit: ADODB
Type: property
Visibility: public
Member Of: TADOConnection
Description
Specifies amount of time to attempt a connection.
指定一个尝试连接的等待时间
Use ConnectionTimeout to specify the amount of time, in seconds, that can expire before an attempt to make a connection is considered unsuccessful. The default value is 15 seconds.
If a connection is successfully made prior to the expiration of the seconds specified or the Cancel method is called, ConnectionTimeout has no effect. If the specified time expires and a connection has not been successfully made, the attempt is terminated and an exception is raised.
使用ConnectionTimeout来指定一个时间长度,以秒为单位,以指定在尝试连接不成功时要等待的时间。默认值为15秒。
如果连接成功并早于指定的等待时间或者在此期间调用了Cancel方法,ConnectionTimeout 就不会起作用。如果已经超出这个等待时间,尝试连接依然没有成功,这个连接尝试就会终止并会抛出一个连接“异常”。
从文档的说明来看,如果我们想减少等待时间就是应该把ConnectionTimeout 属性的值设小一点。这跟我们的理解是一致的。其实,是文档没有说明清楚,我们还应该设置一下另外的一个属性,而且这是必须的:
Conn.ConnectOptions := coAsyncConnect; //must be coAsyncConnect!
这样做的目的就是将连接的过程设为异步的,从而让连接超时程序能够很快地退出等待。否则,你指定的这个等待时间无论长短都不会起到任何作用,程序一直会等待超过30秒的时间。这个没得解释,不管你愿意不愿意,想让ConnectionTimeout起作用这个参数必须这样设!听起来很霸道啊!
如果不想改变原来的连接选项,我写了一个专门的用作测试连接的函数,可以独立使用。原理很简单,就是在其内部创建一个异步方式的连接,附上指定的连接字符串和等待时间,如果在等待时间结束前连接成功函数会返回true,否则返回false。这个函数体看起来很简单,很好理解,不过需要说明的是,其等待时间并不是很准确,有时候会比你指定的等待时间要长一点点,顶多多出2~3秒的样子,所以我把ATimeOut的默认值设为5。
function TryAdoConnect(const AConnStr: string; ATimeOut: DWORD=5): Boolean;
var FConn: TADOConnection;
begin
FConn := TADOConnection.Create(nil);
try
FConn.LoginPrompt := False;
FConn.ConnectionTimeout := ASecTimeOut;
FConn.ConnectionString := AConnStr;
FConn.ConnectOptions := coAsyncConnect; //must be coAsyncConnect!
try
FConn.Open();
result := FConn.Connected; //Waiting... //ok.
except
end;
finally
FConn.Free;
end;
end;
如果这个方式你依然不满意,那么我们可以另写一个专门的等待线程,每隔10到50毫秒检测一次是否连接成功,如果成功就返回,否则就继续等待直到超时。
TADOConnection如何测试连接数据库超时的解决办法的更多相关文章
- asp.net连接数据库超时的解决办法
错误提示:“超时时间已到.超时时间已到,但是尚未从池中获取连接.出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小. ” 经过几天辛苦写的代码,终于实现了功能丰富的查询功能,但是使用的过 ...
- HTTP 408请求超时错误解决办法
错误描述 对于大多数网站而言,我们所看到的错误消息已经是开发者定制过的页面,比如我们最常见的自定义404错误页面,一般而言,我们看到的408错误应该是类似这样的提示:“408:Request Time ...
- Windows开启关闭测试模式的方法(含开启测试模式失败的解决办法)
前言: 内含:Windows开启关闭测试模式的方法.开启测试模式失败的解决办法.win10进入bios的方式.BitLocker恢复方式. 对于互联网从业者来说 ...
- Github网站加载不完全,响应超时,解决办法
Github网站加载缓慢信息不全解决方法 Github是一个代码托管平台和开发者社区,开发者可以在Github上创建自己的开源项目并与其他开发者协作编码.毫不夸张地说,高效利用Github是一个优秀的 ...
- 该死的Kafka,远程连接Kafka超时以及解决办法
关于消息的发布与订阅,之前一直使用的是activeMQ基于JMS的消息队列进行操作的,最近听说有一个更高效的消息的发布与订阅技术,就是Kafka. 关于kafka的介绍,在这里就不做过多讲解了,因为我 ...
- Docker镜像拉取失败或超时的解决办法:添加国内镜像
$ docker pull php:7.1-fpm-alpine Error response from daemon: Get https://registry-1.docker.io/v2/: n ...
- DEDE织梦 后台特别卡,有时响应超时的解决办法
跟大家一样,大致情况是: 1.打开后台首页第一次没问题,但是刷新或者点其他菜单就一直卡着了. 2.关掉浏览器重新进首页没问题,但是一旦进了首页再打开php页面就卡死了. 3.服务器返回Maximum ...
- mysql导入sql文件过大或连接超时的解决办法
前段时间出差在现场开发的时候,导入数据库老是出问题.最后发现了一个神奇sql语句交给实施,只要导入出错就把如下语句执行就可以了.至今屡试不爽. 1 2 3 4 5 6 7 set global max ...
- MySQL导入SQL文件过大或连接超时的解决办法/在navcat执行sql卡在0%
set global max_allowed_packet=100 000 000;set global net_buffer_length=100000;SET GLOBAL interactiv ...
随机推荐
- (寒假开黑gym)2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017)
layout: post title: (寒假开黑gym)2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017) au ...
- SHELL 在指定行的前/后插入指定内容
#如果知道行号可以用下面的方法 sed -i '88 r b.file' a.file #在a.txt的第88行插入文件b.txt awk '1;NR==88{system("cat ...
- Tomcat线程池实现
目前市场上常用的开源Java Web容器有Tomcat.Resin和Jetty.其中Resin从V3.0后需要购买才能用于商业目的,而其他两种则是纯开源的.可以分别从他们的网站上下载最新的二进制包和源 ...
- Annotation的语法和使用
http://blog.csdn.net/cdl2008sky/article/details/6265742 (1) .<context:component-scan base-package ...
- POJ 3168 Barn Expansion (几何基础)
[题目链接] http://poj.org/problem?id=3168 [题目大意] 给出一些矩形,没有相交和包含的情况,只有相切的情况 问有多少个矩形没有相切或者边角重叠 [题解] 我们将所有的 ...
- 分析成绩 Exercise07_04
import java.util.Scanner; /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:分析成绩 * */ public class Exercise07_04 ...
- java web定时任务---Timer
写在前面: 在最近的项目中需要每天定时对数据库表进行查询,并完成相关数据的更新操作.首先让我想到的是Timer类,记得在一开始维护那个老系统的时候,开了个接口,也涉及到了定时的操作.下面就记录下大概的 ...
- STL之vector2
描述 依次输入n个整数,每次输入时检查该值是否已经出现在vector中,如果存在则不插入,否则将其插入到开头位置. 部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码. int main() ...
- 可见性-volatile
出处: http://blog.csdn.net/vking_wang/article/details/9982709
- 【mybatis】idea中 mybatis的mapper类去找对应的mapper.xml中的方法,使用插件mybatis-plugin
idea中 mybatis的mapper类去找对应的mapper.xml中的方法,使用插件mybatis-plugin,名字可能叫Free mybatis-plugin 安装上之后,可能需要重启ide ...