我有个大问题。请看下面的示例代码
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个连接,但我认为,如果我写了好的源代码,这不会成为问题。所以我的问题是:为什么“该死的”连接仍然是开放的?提前谢谢你!
发布于 2010-05-22 01:41:13
考虑将您的MySqlConnection操作包装在Using语句中...
在该Using ... new语句中实例化的任何对象都将由编译器正确处理。一旦该End Using语句出现,该对象就会离开作用域。按照常规,在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这一事实。
发布于 2010-05-22 01:40:57
尝试调用conn.Dispose(),然后将其设置为null。另外,您是否还在Function1和Function2中打开一个连接,因为您似乎正在创建2个连接。如果是这种情况,请尝试实现单例模式来管理您的连接。
https://stackoverflow.com/questions/2884240
复制相似问题