2024年1月6日发(作者:)

Net 连接池的配置Timeout expired. The timeout period elapsed prior to

completion of the operation or the server is not responding.”

在数据库操作过程中默认打开了连接池,不需要再进行手工配置。这个特性可以使数据库操作时效率提高,但也要有相应的代码配合,才能真正提高程序效率。

1、连接字符串

中的连接池大小可以通过数据库连接字符串来控制,例如:

string cs =

"server=.;uid=sa;pwd=tcaccp;database=pubs;pooling=true;min pool size=5;max

pool size=10"

其中 pooling 表示是否打开连接池,默认为打开,关掉时需要 pooling = false;

min pool size 表示连接池最少保存几个连接对象;

max pool size 表示连接池最多保存几个连接对象。(最大值不能为 0,也不能小于最小值)

配置好以后,通过 SqlConnection con = new SqlConnection(cs); 即可得到一个属于连接池的连接对象。

但一定要注意,连接字符串的任何改动,系统都会认为是另一个完全不同的数据库连接,将会创建新的连接池,这必然会造成更大的系统开销。所以,为了保证某些连接对象属于一个连接池,连接字符串不能有任何变化,包括大小写,包括空格,都不能有任何变化。

2、程序中的改动

普通的数据库操作:

SqlConnection con = new SqlConnection(cs);

try

{

();

//进行各种数据库操作

}

catch(Exception ex){ ine(e); }

finally

{

();

e();

}

这个过程很繁琐,每次都要在操作完毕后保证连接对象的关闭和资源释放。在打开连接池特性以后,finally 中的内容,其实是将连接对象的状态置为关闭,然后放回到连接池中。既然系统知道要放回连接池,那有没有什么更好的方法呢?

using(SqlConnection con = new SqlConnection(cs))

{

try

{

();

//

}

catch(Exception ex){ ine(e); }

}

.Net 中的 using 语句,不光能导入命名空间,还能在程序体内,局部使用某个对象。像上边代码,con 的作用域只有 using 对应的大括弧这么大。更神奇的是,using 可以在对象作用域结束时,自动调用 e()将对象释放,所以以上代码中,没有 () 和

e(),同样可以释放资源,放回连接池,省了 finally 和手工关闭的麻烦。但同时需要注意,using 既然是在结束作用域时是自动调用对象的 Dispose()方法,那就是说不是什么类型的对象都可以用 using 的方式自动释放,必须要实现 IDispose 接口。

当使用.NET开发数据库应用时,有时会遇到下面的超时异常,Timeout expired. The timeout

period elapsed prior to completion of the operation or the server is not responding.

现把解决方法总结一下:

影响服务器产生超时的设置大致有:

1. īptTimeout,

2. Connection对象的CommandTimeOut属性,

3. Command对象的CommandTimeOut属性,

4. IE浏览器的设置.

īptTimeout,默认值是90秒.

要增大它,在你的asp文件中加一句,如下:

īptTimeout=999,

将页面超时设为999秒.

最初我只设置īptTimeout,

但仍会出现timeout错误,无论它的值设成都多大.

后在社区里看到一帖子,提到commandTimeout属性,

于是查看Option Pack文档,果然还有其他的timeout.

Connection对象和Command对象都有个CommandTimeOut属性,

连接字符串中设置了 Connect Timeout只对SqlConnection起作用。

dTimeout

获取或设置在终止执行命令的尝试并生成错误之前的等待时间。

等待命令执行的时间(以秒为单位)。默认为 30 秒。

tionTimeout

获取在尝试建立连接时终止尝试并生成错误之前所等待的时间。

等待连接打开的时间(以秒为单位)。默认值为 15 秒。

一些更详细的对这个问题的描述看:/?LINKID=357

如果你有一个耗时的查询或数据处理,

很容易就超时了.要增大它,也很容易,创建对象后,

设置它的属性,如下:

dTimeOut = 999,

设为999秒,其中con是一Connection对象.

如设为零,将无限等待,没有这一timeout限制.

Command对象不会继承Connection的这一属性,

所以对可能超时的Command也要单独设置CommandTimeout属性.