每当应用程序池被回收时,我都会在从c#应用程序连接SQL Server时观察到以下错误。我已经检查过这个错误收到的时候,数据库中只打开了20个连接,尽管实际限制是200(我在web.config中设置)。
此外,连接在代码中已正确关闭,因此不会出现问题。请注意,每次游泳池回收时都不会发生这种情况,但在我们系统有交通的一天内就会发生。
System.InvalidOperationException:超时已过期。超时期限 在从池中获取连接之前已经过了。这可能有 之所以发生,是因为所有池化连接都在使用中,并且最大池大小 达成了。在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(的DbConnection owningConnection,TaskCompletionSource
1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource
1次重试,DbConnectionOptions userOptions)at at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(的DbConnection outerConnection,DbConnectionFactory connectionFactory, TaskCompletionSource1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource
1 重试) System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 重试)在System.Data.SqlClient.SqlConnection.Open()处 System.Data.SqlClient.SqlConnection.Open()
答案 0 :(得分:0)
每次打开连接时,请确保必须将其关闭。
答案 1 :(得分:0)
试试这个:
SqlConnection cn = new SqlConnection(strCn);
try
{
using (SqlCommand cmd = new SqlCommand("select * from xxxx", cn))
{
cn.Open();
//do something
cn.Close();
}
}
catch (Exception exception)
{
cn.Close();
throw exception;
}