超时已过期:连接池

时间:2009-09-23 14:21:37

标签: asp.net sql-server

以下是我们遇到的错误。我们将app和db服务器从32位移到了x64。 Framework 2.0 Service Pack 2安装在服务器上。

超时已过期。从池中获取连接之前经过的超时时间。这可能是因为所有池连接都在使用中并且达到了最大池大小。

以下是DataAccess的一些代码,它从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;
            }           
        }

3 个答案:

答案 0 :(得分:2)

尝试使用

SqlConnection.ClearAllPools()

并查看这是否真的是连接池问题。

答案 1 :(得分:2)

A)确保您的最小池大小足够大。也许是20或30之类的东西。

B)小心你正确处理物体。我了解到,例如,当您使用IDataReader从数据库中获取内容时,您应该

使用(IDataReader rdr = ...) {

}

无论什么(包括错误),rdr将被处理掉。无论如何,有时池问题是由于没有正确处理数据库连接引起的。

答案 2 :(得分:0)

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