在连接数据库时,我使用了一个连接池和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
答案 0 :(得分:0)
您的代码可能会导致异常并且永远不会到达Close(),从而使连接保持打开状态,这可能导致打开太多连接。
您可能想尝试在代码中实现Using()。
Here is an article that describes this in more detail.
我遇到了与Max连接相似的问题,而Using()确实有帮助。
答案 1 :(得分:0)
尝试在 iis 中使用回收连接池。您可以将其设置为每 60 分钟左右重置一次。这肯定会解决您的问题。