使用时,如何确定是否需要在MySqlConnection中调用Close()?

时间:2018-10-14 08:56:18

标签: c# dispose using mysql-connector mysqlconnection

  

使用MySql.Data.MySqlClient;

带有“ using”的简单连接代码:

using (IDbConnection sql = new MySqlConnection(ConnectionString))
     {
           try
           {
                sql.Open();
                var x = sql.Execute("query...");
           }
            catch (Exception ex)
           {
                 Console.WriteLine(ex.Message);
           }
     }

“正在使用”调用Dispose(),但是如果Dispose()调用Close()?

如何确定使用时是否需要在MySqlConnection中调用Close()?

3 个答案:

答案 0 :(得分:1)

什么也不做。

Dispose将正确关闭连接。

摘自文档:

  

Dispose()-释放MySqlConnection使用的所有资源

形成MySqlConnection.Dispose的源代码

void IDisposable.Dispose()
{
    if (State == ConnectionState.Open)
        Close();
}

答案 1 :(得分:0)

您可以在此处尝试,您可以将其放在finally子句中

if (sql.State == ConnectionState.Open)
{
    sql.Close();
}

答案 2 :(得分:0)

这是我正在使用的示例DBConnect类。使用此类,在您想要的任何地方创建数据库连接真的很容易。只需创建此类的对象即可。

这是针对MySQL数据库的,如果您使用的是sql服务器,只需将MySql替换为Sql

这是我的DBConnect类

using System    ;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;


namespace test
{

    class DBConnect: IDisposable 
    {
        private static String server = "localhost";
        private static String port = "3306";
        private static String database = "testDB";
        private static String username = "root";
        private static String password = "";

        private static String connectionString = "Server=" + server + ";Port=" + port + ";Database=" + database + ";Uid=" + username + ";Password=" + password + ";";
         public MySqlConnection con = new MySqlConnection(connectionString);



        public DBConnect() //Constructor
        {

            try
            {
                con.Open();
                Console.WriteLine("Database connected");
            }
            catch (Exception e)
            {
                Console.WriteLine(e.StackTrace);
                Console.WriteLine("Database Connection Failed");
                throw new Exception();
            }


        }


        public void Dispose()
        {
            con.Close();
        }
    }
}

这是您使用此类的方法

using(DBConnect db = new DBConnect())
{
    String q = "your sql Statement here";
    MySqlCommand cmd = new MySqlCommand(q, db.con);
    cmd.ExecuteNonQuery();
    MessageBox.Show("Item added", "Done", MessageBoxButtons.OK,mesageBoxIcon.Information);
                }