C# 连接超时VS IIS
我在错误日志中获得此异常 在此之前已过超时时间 正在从池中获取连接 重新启动IIS使我重新登录到我的应用程序。。那么你认为问题在哪里?是否在IIS属性设置中 代码是这样的:C# 连接超时VS IIS,c#,mysql,C#,Mysql,我在错误日志中获得此异常 在此之前已过超时时间 正在从池中获取连接 重新启动IIS使我重新登录到我的应用程序。。那么你认为问题在哪里?是否在IIS属性设置中 代码是这样的: MySqlConnection connection = null; try { connection = MySqlConnectionHandler.OpenConnection(); string strText =string.Empty; strText = "<<sql sta
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);
}
这几乎总是意味着你没有在你的连接上调用
Dispose()
,并且在GC运行之前你已经饱和了池——如果你的应用程序现在已经死掉,这可能不会发生。从本质上讲,您已经在一段时间内连续打开了连接(从未归还),现在已经没有了。解决方案:完成后,将它们返回池中
每当您使用连接之类的东西时,请使用
using
语句或其他一些机制,以确保在处理完它后立即处理它。这同样适用于任何IDisposable,但连接特别容易受到此攻击。因为您说您确实调用了Dispose()
我会尝试两件事。暂时增加连接超时时间,看看这是否是问题所在:
MySqlCommand.CommandTimeout = 45; //in seconds
这将降低应用程序的速度,因此您只能将其用于故障排除。如果是,您需要优化SQL查询
或者,您的权限可能会被超出,因此您可能需要提高权限。@Brad-补充一点,这里接受的答案提出了一些奇怪的说法,即调用
Close()
,而不是只调用Dispose()
;这是不必要的-Dispose()
调用Close()
谢谢,但我确实调用Dispose(),请使用我的示例代码编辑。在所有通话中都认真地输入您的信息。@Sharpeye500?任何地方都没有遗漏?使用(MySqlDataReader=cmd.ExecuteReader()){while(reader.Read()){//some statements}}这看起来是正常的还是应该是这样的?在几乎所有情况下,使用(MySqlDataReader reader=cmd.ExecuteReader()){while(reader.Read()){//some statements}reader.Close();}@Sharpeye500,Dispose()
调用Close()
,因此,如果您使用的是,您很少需要Close()
,但是;p@Marc-可能不是:)否则我可能会有这个错误,我没有。。。“已存在与此连接关联的打开的DataReader,必须先关闭该连接”
MySqlCommand.CommandTimeout = 45; //in seconds