【发布时间】:2012-04-29 17:01:24
【问题描述】:
我正在使用最新的稳定版 MySql Connector/NET 6.5.4.0。
我打开一个到 MySQL 数据库的连接。在 C# 代码中,Connection.State 属性为Open。
我做了一些神奇的事情,当我这样做的时候,我杀死了连接服务器端。但是,在代码中,State 仍然是Open。
我遇到了这个问题,因为我将数据库类的实例保存在每个会话的静态变量(字典)中。 如果用户发出请求,则从该变量中提取数据库类,并向其触发查询。 但是,如果连接关闭服务器端(被 de sysadmin 杀死,等待超时),则不会更新状态。
是否有解决此问题的方法?我的同事已经为它提交了错误报告 (http://bugs.mysql.com/bug.php?id=64991)。
在执行前关闭和打开,对性能非常不利,所以没有选择。
【问题讨论】:
-
你看过connection.Ping方法了吗?如果为假,则连接关闭。 dev.mysql.com/doc/refman/5.0/en/… 您可能还想订阅连接上的 StateChange 事件以检查发生了什么。作为一般建议,您可能不应该将连接缓存为静态成员;只要连接池处于打开状态,您就不会通过保持连接实例看到任何有意义的性能提升。另外,如果出现错误怎么办?
-
在这种情况下连接池被关闭,我将研究 Ping 方法。如果此连接关闭,我会收到“命令执行期间遇到致命错误”
-
Ping() 方法有效,但需要很长时间(每次调用 0.020 秒)。 StateChange 事件触发得太晚(调用执行阅读器时)。
标签: c# mysql database-connection mysql-connector