代码之家  ›  专栏  ›  技术社区  ›  azamsharp

超时已过期:连接池

  •  0
  • azamsharp  · 技术社区  · 15 年前

    这是我们得到的错误。我们将应用程序和数据库服务器从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;
                }           
            }
    
    3 回复  |  直到 15 年前
        1
  •  2
  •   Josh Warner-Burke    15 年前

    a)确保您的最小游泳池大小足够大。可能是20或30岁左右。

    b)小心妥善处理物品。我了解到,例如,当您使用IDataReader从数据库中获取资料时,应该这样做。

    使用(IDataReader RDR=…) {

    }

    这样,无论RDR将被处理什么(包括错误)。不管怎样,有时池问题是由于未正确处理数据库连接造成的。

        2
  •  2
  •   Pierre-Alain Vigeant    15 年前

    试用使用

    SqlConnection.ClearAllPools()
    

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

        3
  •  0
  •   Chris Coneybeer    15 年前

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