Закройте ветку против базы данных MySQL в C#
-
20-09-2019 - |
Вопрос
Каков правильный способ закрытия протектора после запуска запроса против базы данных MySQL из формы Windows в C#?
Простой открыт достаточно близко?
conn.Open();
//querycode
conn.Close():
Решение
Попробуй использовать:
using(MySqlConnection conn = new MySqlConnection(connString))
{
conn.Open();
} // conn is automatically closed and disposed at the end of the using block
Другие советы
Это нормально, как вы делаете это, вы также можете обернуть объект соединения в using
Блок как это:
using (var con = new MySqlConnection(/*connection string*/))
{
con.Open();
//do stuff
// con.Close(); //don't need this it will be closed automatically*
}
(*видеть)
Нет, код в вашем вопросе недостаточно хорош. Если ваш запрос бросает исключение, вы не закроете его своевременно, и он останется висящим, пока коллекционер мусора не заметит его.
Вам нужно приложить объект в using
Блок, как показано другими или на минимальном, закажите его в структуре Try/, наконец.
Классы, которые используют ресурсы, которые вам нужны для очистки после этого, обычно внедряют Idisposable интерфейс. Это означает, что он обеспечивает функцию, называемую Dispose (), которая может использоваться для свободных ресурсов.
Для одноразовых объектов вы можете использовать с использованием утверждение:
using ( SomeDisposableClass c = new SomeDisposableClass() ) {
// ... your code here
} // c.Dispose() automatically called here, freeing up resources
Если класс правильно закодирован, он должен освободить любые ресурсы - будь то подключение к базе данных, открытый дескриптор файла и т. Д. - в его функции ypesose ().
Это означает, что MySQL, вероятно, отключается от базы данных в Dispose (), поэтому вам, вероятно, не нужно явно вызовать C.Close (), но всегда проверять документацию, чтобы быть уверенным.