我正在使用最新的穩定MySql連接器/ NET 6.5.4.0。連接狀態MySql連接器/ NET
我打開了一個到MySQL數據庫的連接。在C#代碼中,Connection.State
屬性爲Open
。 我做了一些魔術stuf,而當我這樣做時,我殺死了連接服務器端。但是,在該州的代碼仍然是Open
。
我遇到了這個問題,因爲我將數據庫類的實例保存在每個會話(Dictionary)的靜態變量中。 如果用戶執行請求,則從該變量中提取數據庫類,並向其發出查詢。 但是,如果連接關閉服務器端(由de sysadmin殺死,等待超時已過),則狀態不會更新。
是否有解決此問題的方法?我的同事已經提交了一份bug報告(http://bugs.mysql.com/bug.php?id=64991)。
執行前關閉並打開,對性能非常不好,所以沒有選擇。
你看過connection.Ping方法嗎?如果它是錯誤的,則連接關閉。 http://dev.mysql.com/doc/refman/5.0/en/connector-net-ref-mysqlclient.html#connector-net-ref-mysqlclient-mysqlconnection-ping您可能還想要訂閱StateChange事件連接來檢查發生了什麼。作爲一般建議,您可能不應將連接緩存爲靜態成員;只要連接池處於打開狀態,通過保持連接實例,您不應該看到任何有意義的性能增益。另外,如果發生了錯誤,會發生什麼情況? – dash 2012-04-18 09:44:30
在這種情況下關閉連接池,我會研究Ping方法。如果連接關閉,我會收到'命令執行期間遇到致命錯誤' – 2012-04-18 09:55:12
Ping()方法有效,但需要很長時間(每次調用0.020秒)。 StateChange事件被觸發得太晚(當調用執行閱讀器時)。 – 2012-04-20 09:16:32