我有一个很大的问题。 看看这个示例代码
private sub FUNCTION1()
dim conn as new mysqlconnection(myconnstring)
conn.open
---- do something
FUNCTION2()
----
conn.close
end sub
private sub FUNCTION2()
dim conn as new mysqlconnection(myconnstring)
....
conn.open
-- do something
conn.close
end sub
尽管我经常关闭所有连接,但它们仍然在mysql服务器上“打开”。 我知道这是因为我使用MySQL管理工具来检查我的源代码“逐行”打开了多少连接。 事实上,我花了很多时间“用户已超过'max_user_connections'资源(当前值:5)” 我的主机允许只有5个连接,但我认为如果我写好的源代码,这不是一个问题。 所以我的问题是:为什么“该死的”连接仍然开放? 提前谢谢!
答案 0 :(得分:1)
考虑将您的MySqlConnection操作包装在Using
语句中......
您在Using ... new
语句中实例化的任何对象都将由编译器正确处理。一旦出现End Using
语句,该对象就会脱离scop。正常情况下,开发人员需要处理在Using
块中声明的任何对象。
Using conn As New MySqlConnection(myConnString)
Using cmd As New MySqlCommand("SELECT * FROM Employees", conn)
conn.Open()
Using rdr As MySqlDataReader = cmd.ExecuteReader()
While rdr.Read()
Console.WriteLine(rdr(0))
End While
End Using
End Using
End Using
在这种情况下,您无需在自己的Using
中包含命令和阅读器,但它允许您利用它们都实现IDisposable
的事实。
答案 1 :(得分:0)
尝试调用conn.Dispose(),然后将其设置为null。 另一方面,您是否在Function1和Function2中打开连接,因为您似乎正在创建2个连接。如果是这种情况,请尝试实施单例模式来管理您的连接。