簡體   English   中英

當我在c#中放置連接時,Mysql是否關閉6.3.6中的連接(Mysqlconnection)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM