连接状态MySql连接器/ NET

我正在使用最新的稳定MySql连接器/ NET 6.5.4.0。

我打开一个到MySQL数据库的连接。 在C#代码中, Connection.State属性是Open 。 我做了一些神奇的stuf,而当我这样做时,我终止了连接服务器端。 但是,在国家代码中,国家仍然是Open

我遇到了这个问题,因为我将每个会话的静态变量(Dictionary)保存为我的数据库类的实例。 如果用户执行请求,则从该变量中提取数据库类,并向其发出查询。 但是,如果连接关闭服务器端(由系统管理员杀死,等待超时已过),状态不会更新。

有没有解决这个问题的方法? 我的同事已经提交了一份bug报告(http://bugs.mysql.com/bug.php?id=64991)。

执行前关闭并打开,对性能非常不利,所以没有选择。


根据您的评论,搁置设计问题(应该真正集中):

在这种情况下关闭连接池,我会查看Ping方法。 如果此连接已关闭,则会收到'执行命令期间遇到致命错误'

如果ping失败,是否有任何理由不重新创建连接?

private static MySqlConnection conn;
private static int maxRetries;

private static void connect()
{
    conn = <connect code>;
}

private static MySqlConection GetConnectionRetry(int count)
{
    if (conn != null && conn.State == Open)
    {
        try
        {
            conn.Ping();
            return conn;
        }
        catch (Exception e) // better be specific here
        {
            if (count <= maxRetries)
            {
                connect();
                return GetConnectionRetry(count + 1);
            }
            else throw e;
        }
    }
    else
    {
        connect();
        return GetConnectionRetry(count + 1);
    }
}

static MySqlConnection GetConnection()
{
    return GetConnectionRetry(1);
}

我建议你使用singelton模式进行连接。 所以你可以确保总是只有一个连接打开,你只需要管理这个连接。

链接地址: http://www.djcxy.com/p/60973.html

上一篇: Connection state MySql Connector/NET

下一篇: C# with MySQL through Connector/NET