超时时间已到…所有池连接都已被使用并已达到最大池大小”问题

来源:互联网 发布:服装 淘宝推广方案 编辑:程序博客网 时间:2024/05/16 10:49

问题描述:超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。

问题分析:
问题的原因是与数据库的连接没有显示关闭,而等系统自动回收是要时间的.

解决方案:

1.在代码里面,把未关闭的连接关闭
2.扩大共享池,方法如下:
2.1修改连接池的连接生存期
因为默认值是60秒,即连接从应用程序被释放后可以在池中保存的时间。
  如果是ODBC的话
  
则可以在ODBC Data Source Administrator中手动更改,该程序位于“Start”菜单中的“Programs”->"Adminstrative Tools"(中文名:管理工具)下,或从"Control Panel"(中文名:控制面板)中打开“ODBC Data Source Administrator”(ODBC数据源管理器),再选择“Connection Pooling”(连接池)选项卡,双击驱动程序中的“SQL Server”,选择“Pool Connetions to this drive”(使用池连接该驱动程序),把下面的时间60秒改的大一点,例如120。
  如果是SqlConnection的共享连接
  
则为ConnectionString属性Connection Lifetime数值名称指定一个值,该值默认情况下是0,表示连接永远不会从池中被自动移走。如果指定一个不同的值,那么一旦连接被返回到池中,该值将和连接的创建时间及当前时间进行比较。如果生存期超过了Connection Lifetime的值,那么连接将从池中被移走。

2.2改变连接池的大小
在连接字符串的后面加上以下代码:Enlist=true;Pooling=true;Max Pool Size=300;Min Pool Size=0;Connection Lifetime=300;user id=sa;packet size=1000