2009-09-23 121 views
0

这是我们正在收到的错误。我们将应用程序和数据库服务器从32位移至x64。 Framework 2.0 Service Pack 2安装在服务器上。超时过期:连接池

超时已过期。在从池中获取连接之前已超时。发生这种情况的原因可能是因为所有连接池都在使用中,并且达到最大池大小。

下面是数据访问一些代码,从try块内返回一个值:

public string GetSomething() 
     { var a = String.Empty; 

      try 
      { 
       // loop through the datareader 

       return "some data"; 
      } 

      finally 
      { 
       reader.close(); 
      } 

      return whatever; 
     } 

这里是打开和管理方面,一些代码:

public DBHelper(IDbCommand command) 
     { 

      this.command = command; 

      if (command.Connection.State == ConnectionState.Open) 
      { 

       shouldCloseConnection= false; 
      } 
      else 
      { 

       command.Connection.Open(); 
       shouldCloseConnection= true; 
      }   
     } 

回答

2

A)确保你的最小池大小足够大。可能类似20或30.

B)小心你正在处理对象。我了解到,例如,当您使用的IDataReader从数据库得到的东西,你应该做的

使用(IDataReader的RDR = ...) {

}

这样,不管什么(包括一个错误)rdr将被丢弃。无论如何,有时池问题是由于没有正确处理数据库连接而造成的。

+0

原来这是一个基本库中的连接泄漏。 – azamsharp 2009-09-24 18:25:13

0

不是一个直接的答案,但请查看活动监视器并查看为应用程序打开的连接。也许在以前的安装中,超时设置被缩短,导致连接在池被填充之前被SQL强制关闭。

+0

在活动监视器中,它表示大多数连接正在休眠。我认为这意味着他们在游泳池中等待使用。 – azamsharp 2009-09-23 14:58:58

2

使用

SqlConnection.ClearAllPools() 

,看看这实在是一个连接池的问题尝试。

相关问题