MySql Connector for Dot Net 的源代码可从MySql Site获得。如果您下载它们并查看 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();
......
}
这样,如果 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
那就不足为奇了。连接已关闭并处置