[英]Do Mysql close the connection in 6.3.6 when I disposed the connection in c# (Mysqlconnection)
人們經常在談論Sqlconnection的時候,System.Data命名空間中就涉及到數據庫連接。
上次在論壇上我讀到,即使您在MySQL中使用using(),也需要調用conn.close();。
對此不確定。 對於MySQL,我不確定。 我有一些連接到MySQL的C#代碼。
這段代碼打開了一些他們從未關閉過的連接。 我想檢查代碼。 如何驗證連接已關閉。
我的意思是首先要如何驗證using()自動關閉mysqlconnection。 其次,我如何調試仍無法關閉連接的代碼。
有人能很好地知道連接在何處打開和未關閉。
MySqlConnection cnn = new MySqlConnection(Globals.CONNSTRING);
cnn.Open();
using (cnn)
{
}
我添加了此示例代碼,以了解是否有人可以告訴我這是否會自動關閉連接。
可從MySql網站獲得MyNet Connector for Dot Net的源代碼。 如果下載它們並查看MySqlConnection的Dispose方法,則會看到:
protected override void Dispose(bool disposing)
{
if (State == ConnectionState.Open)
Close();
base.Dispose(disposing);
}
但是我必須指出,這是6.5.6版的源代碼。 我找不到版本6.3.6的源代碼。 但是,以前的版本(6.1.6)具有相同的代碼。
查看您的代碼,我發現它有點奇怪和危險。
通常常見的使用模式如下
using(MySqlConnection cnn = new MySqlConnection(Globals.CONNSTRING))
{
cnn.Open();
......
}
這樣,如果開放fais,則將斷開連接。 而在您的代碼中不會發生這種情況,因為您永遠不會輸入using語句。
最后,這是上面的代碼生成的IL代碼(僅添加了FAKE和無效的連接字符串)
IL_0000: ldstr "test"
IL_0005: newobj MySql.Data.MySqlClient.MySqlConnection..ctor
IL_000A: stloc.0 // cnn
IL_000B: ldloc.0 // cnn
IL_000C: callvirt System.Data.Common.DbConnection.Open
IL_0011: ldloc.0 // cnn
IL_0012: stloc.1 // CS$3$0000
IL_0013: leave.s IL_001F
IL_0015: ldloc.1 // CS$3$0000
IL_0016: brfalse.s IL_001E
IL_0018: ldloc.1 // CS$3$0000
IL_0019: callvirt System.IDisposable.Dispose
IL_001E: endfinally
那也就不奇怪了 連接已關閉並處理
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.