Firebird数据库上的错误MaxPoolSize

时间:2014-01-03 14:29:11

标签: c# connection-pooling firebird

在连接数据库时,我使用了一个连接池和Firebird数据库。我使用FirebirdSql.Data.FirebirdClient版本2.6.5.0。 我有以下连接字符串:

<add name="db" connectionString="Server=***;user   
id=***;password=***;Charset=ANSI_CHARSET;Database=***;
Connection lifetime=15;Pooling=true;MinPoolSize=0;MaxPoolSize=10" 
providerName="FirebirdSql.Data.FirebirdClient" />

我有以下使用数据库连接的代码:

IEnumerable<Orders> ord = new List<Orders>();
using(FbConnection fbCon = new FbConnection("my connection string"))
{
    fbCon.Open();
    using(FbCommand command = fbCon.CreateCommand())
    {
        command.CommandText = "SELECT first 100 ID, SYMBOL, NUMBER, POS FROM Z1";
        Debug.WriteLine(string.Format("Before Close: {0}", FirebirdSql.Data.FirebirdClient.FbConnection.GetPooledConnectionCount(fbCon)));
        ord= command.ExecuteReader(CommandBehavior.CloseConnection).ConvertToList<Orders>();
    }
}

然而,我收到错误:

Timeout exceeded.
at FirebirdSql.Data.FirebirdClient.FbConnectionPool.CheckMaxPoolSize ()
at FirebirdSql.Data.FirebirdClient.FbConnectionPool.CheckOut ()
at FirebirdSql.Data.FirebirdClient.FbConnection.Open ()

错误是由于达到MaxPoolSize引起的......每当我调用上面的代码时,在输出窗口中我都有辅助消息:

Before Close: 1
Before Close: 2
...
Before Close: 10

2 个答案:

答案 0 :(得分:0)

您的代码可能会导致异常并且永远不会到达Close(),从而使连接保持打开状态,这可能导致打开太多连接。

您可能想尝试在代码中实现Using()。

Here is an article that describes this in more detail.

我遇到了与Max连接相似的问题,而Using()确实有帮助。

答案 1 :(得分:0)

尝试在 iis 中使用回收连接池。您可以将其设置为每 60 分钟左右重置一次。这肯定会解决您的问题。