我在错误日志中遇到此异常..
之前经过的超时时间 从池中获取连接。
重新启动IIS会让我重新登录我的应用程序..那么您认为问题出在哪里?它是在IIS属性设置中吗?
代码是这样的:
MySqlConnection connection = null;
try
{
connection = MySqlConnectionHandler.OpenConnection();
string strText =string.Empty;
strText = "<<sql statement>>";
using (MySqlCommand cmd = new MySqlCommand(strText, connection))
{
cmd.Parameters.Add(new MySqlParameter("ID", MySqlDbType.Int32));
cmd.Parameters["ID"].Value = 100;
cmd.ExecuteNonQuery();
}
}
finally
{
MySqlConnectionHandler.CloseConnection(connection);
}
我的CloseConnection方法内部有
if (con != null)
{
con.Close();
con.Dispose();
}
答案 0 :(得分:2)
这几乎总意味着你没有在你的连接上调用Dispose()
,并且你已经使池已经饱和,直到GC运行 - 如果你的应用现在已经死了,它可能不会。从本质上讲,你已经在一段时间内连续打开了连接(没有给它们回复),现在没有了。解决方案:完成后将它们带回池中。
每当您使用类似连接的内容时,请使用using
语句或其他一些机制来确保在完成连接后立即处理它。这同样适用于任何IDisposable
,但连接特别容易受此影响。
答案 1 :(得分:1)
因为你说你确实调用了Dispose()......
我会尝试两件事。 暂时增加连接超时以查看是否存在问题:
MySqlCommand.CommandTimeout = 45; //in seconds
这会降低您的应用程序速度,因此您只应将其用于故障排除。如果是,则需要优化SQL查询。
或者,您的connection pool可能会被超出,因此您可能需要将其提升。