2009-09-23 120 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() 

,看看這實在是一個連接池的問題嘗試。

相關問題