超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
问题描述:我们获取连接超过连接池最大值时产生如上异常。通常连接池最大值为100。当我们获取连接超过最大值时,ADO.NET等待连接池返回连接而超时,这样将抛出如上异常
产生这样的问题: 连接数大于 N 并且超出设置的时间(所有连接池中的连接都在用,并且等待的时间超时)
解决办法:1首先要做的是在我们使用连接后立即关闭连接
2 其次我们可以通过连接字符串中的Max Pool Size = N;来动态扩大连接池中的连接最大数量。
一个connection对象只能打开一个DataReader对象,在该datareader对象关闭之前,无法打开其他的datareader对象,知道该datareader 对象调用close 方法为止)
更改 连接数量和连接时间 根据实际情况而定
为什么会出现这样的问题呢?
就是比如买票一样,五个窗口同时创建,每个人都有自己的等待时间.假如五个创建,占用一个.还有四个空闲. 占用五个.剩下的人需要等待.但是 可能等待的时间很长.这些人都会不耐烦(超出规定时间)的走了.出现异常
- Connection Pool 如何工作的?(摘抄自(http://www.cnblogs.com/qqflying/archive/2012/02/13/2349583.html))
当程序执行到Connection.close() 的时候。如果Pooling 为True,ADO.net 就把当前的Connection放到Connection Pool并且保持与数据库之间的连接。
(这个设置主要用于群集的SQL 数据库中,达到负载平衡的目的)。如果Pooling指定为False,则直接断开与数据库之间的连接。
联系客服