连接状态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