我认为当人们考虑数据库连接时,大多数时候他们谈论的是来自 System.Data 命名空间的 Sqlconnection。
上次在论坛上我读到,即使你在 MySQL 中使用 (),你也需要调用 conn.close();
不确定。对于 MySQL,我不确定。我有一些连接到 MySQL 的 C# 代码。
这段代码打开了一些他们从未关闭过的连接。我想检查代码。我如何验证连接是否已关闭。
我的意思首先是如何验证 using() 自动关闭 mysql 连接。 其次,我如何调试仍未关闭连接的代码。
有人有好的方法知道连接在哪里打开和没有关闭吗。
MySqlConnection cnn = new MySqlConnection(Globals.CONNSTRING);
cnn.Open();
using (cnn)
{
}
我已经添加了这个示例代码,想知道是否有人可以告诉我这是否会自动关闭连接。
最佳答案
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
那就不足为奇了。 Connection 关闭并释放
关于c# - 当我在c#中处理连接时,Mysql是否在6.3.6中关闭连接(Mysqlconnection),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16686665/