C# 连接超时VS IIS

C# 连接超时VS IIS,c#,mysql,C#,Mysql,我在错误日志中获得此异常 在此之前已过超时时间 正在从池中获取连接 重新启动IIS使我重新登录到我的应用程序。。那么你认为问题在哪里?是否在IIS属性设置中 代码是这样的: MySqlConnection connection = null; try { connection = MySqlConnectionHandler.OpenConnection(); string strText =string.Empty; strText = "<<sql sta

我在错误日志中获得此异常

在此之前已过超时时间 正在从池中获取连接

重新启动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);
}

这几乎总是意味着你没有在你的连接上调用
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