【问题标题】:Close a thread against a mysql database in c#在c#中关闭一个针对mysql数据库的线程
【发布时间】:2010-12-05 02:34:04
【问题描述】:

在 C# 中从 Windows 窗体对 MySql 数据库运行查询后关闭线程的正确方法是什么?

这样的简单开闭就够了吗?

conn.Open();

//querycode

conn.Close():

【问题讨论】:

  • “关闭胎面”是什么意思?您的意思是要确保在进行 SQL 调用后关闭连接?
  • 我遇到的问题是,当我使用 iv 创建的工具时有时会出现“连接太多”错误,我的 mysql 数据库设置为 max_connections 100。当我运行一个简单的连接时。关闭();每次查询后,它似乎并没有关闭与数据库的连接。在我重新启动 SW 之前,它不会释放 MySql 踏板。

标签: c# mysql resource-management


【解决方案1】:

尝试使用:

using(MySqlConnection conn = new MySqlConnection(connString))
{
    conn.Open();
} // conn is automatically closed and disposed at the end of the using block

【讨论】:

    【解决方案2】:

    使用您之后需要清理的资源的类通常实现 IDisposable 接口。这意味着它提供了一个名为 Dispose() 的函数,可用于释放资源。

    对于一次性物品,可以使用using语句:

    using ( SomeDisposableClass c = new SomeDisposableClass() ) {
    
        // ... your code here
    
    } // c.Dispose() automatically called here, freeing up resources
    

    如果类被正确编码,它应该在其 Dispose() 函数中释放所有资源——无论是数据库连接、打开的文件句柄等。

    这意味着 MySQL 可能会在 Dispose() 中与数据库断开连接,因此您可能不需要显式调用 c.Close() ——但请务必检查文档以确保。

    【讨论】:

      【解决方案3】:

      你这样做没关系,你也可以像这样将连接对象包装到using块中:

      using (var con = new MySqlConnection(/*connection string*/))
      {
          con.Open();
          //do stuff
          // con.Close(); //don't need this it will be closed automatically* 
      }
      

      (*see)

      【讨论】:

      • con.Close();在这里是多余的。
      • 对我来说这似乎并不多余,因为我的应用程序似乎没有构建越来越多的踏板,因为我正在从我的工具中浏览 MySql 数据库。
      【解决方案4】:

      不,您问题中的代码不够好。如果您的查询抛出异常,您将不会及时关闭()它,并且它将一直挂起,直到垃圾收集器注意到它。

      您需要将对象封装在 using 块中,如其他人所示,或者至少将其封装在 try/finally 结构中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多