Как я могу узнать, нужно ли мне вызывать Close () в MySqlConnection при использовании? - PullRequest
0 голосов
/ 14 октября 2018

using MySql.Data.MySqlClient;

Простой код подключения с использованием «:»:

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

«Использование» вызывает Dispose (), но еслиDispose () вызывает Close ()?

Как узнать, нужно ли мне вызывать Close () в MySqlConnection при использовании?

Ответы [ 3 ]

0 голосов
/ 14 октября 2018

Ничего не делать.

Dispose правильно закроет соединение.

Из документации:

Dispose () - Освобождает все ресурсы, используемые MySqlConnection

Сформируйте исходный код MySqlConnection.Dispose

void IDisposable.Dispose()
{
    if (State == ConnectionState.Open)
        Close();
}
0 голосов
/ 14 октября 2018

Это пример класса DBConnect, который я использую.С этим классом действительно легко создать соединение с базой данных где угодно.Просто создайте объект этого класса.

Это для базы данных MySQL, если вы используете sql server, просто замените 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);
                }
0 голосов
/ 14 октября 2018

Здесь вы можете попробовать это, вы можете поместить это в предложение finally

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