Повторное использование MySQL Connector - PullRequest
2 голосов
/ 12 февраля 2011

У меня есть класс с объектом MySqlConnection, который я повторно использую в своем приложении

public class MySqlWrapper : IDbConnection
{
    MySqlConnection _connection = new MySqlConnection();
}

У меня есть несколько методов, использующих этот

public void UseDB()
{
    _connection.Open();  
    // Do highly important stuff  
    _connection.Close();
}

Бывает, что вызов Open ()происходит сбой, потому что соединение уже открыто.
Да, все мои Open () имеют соответствующие Close ()

Теперь решение, которое я нашел, было бы клонировать соединение каждый раз, когда я его использую

    MySqlConnection connClone = _connection.Clone();
    connClone.Open();

По какой-то причине этот фрагмент пахнет плохим кодом.Это безопасно для использования?Есть ли другой способ, который я не знаю, чтобы справиться с открытием / закрытием?

Ответы [ 2 ]

3 голосов
/ 12 февраля 2011

Вы можете проверить, было ли уже открыто соединение с помощью _connection.ConnectionState == ConnectionState.Open.

. Я бы порекомендовал сделать так, чтобы ваш класс реализовал IDisposable и располагал MySqlConnection в методе dispose и инициализировал соединение внутри конструктора (илиметод инициализации).Затем вы можете использовать ConnectionState, чтобы определить, нужно ли вам повторно инициализировать ваше соединение перед выполнением запроса.

Вы должны не подключаться / отключаться между каждым запросом, что будет очень медленно.

3 голосов
/ 12 февраля 2011

Возможно, стоит немного реорганизовать этот класс и создать экземпляр MySqlConnection при каждом использовании в каждом методе?

Также рассмотрим оператор C # using:

using (var myConn = new MySqlConnection())
{      
    myConn.Open();
    //do some work.
}
//the MySqlConnection is now out of scope.

Если это недопустимый вариант / рефакторинг, рассмотрите возможность упаковки .Open() и .Close() в свои try catch собственные блоки.

...