繁体   English   中英

连接状态MySql Connector / NET

[英]Connection state MySql Connector/NET

我正在使用最新的稳定的MySql Connector / NET 6.5.4.0。

我打开与MySQL数据库的连接。 在C#代码中, Connection.State属性为Open 我做了一些魔术操作,而在执行操作时,我杀死了连接服务器端。 但是,在代码中State仍为Open

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

有解决此问题的方法吗? 我的同事已经准备好为其提交错误报告(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模式进行连接。 因此,您可以确保始终只有一个连接处于打开状态,而您只需要管理该连接即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM