MySqlConnection确实没有关闭

时间:2010-05-21 17:37:24

标签: asp.net mysql

我有一个很大的问题。 看看这个示例代码

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个连接,但我认为如果我写好的源代码,这不是一个问题。 所以我的问题是:为什么“该死的”连接仍然开放? 提前谢谢!

2 个答案:

答案 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个连接。如果是这种情况,请尝试实施单例模式来管理您的连接。