Автоматическое переподключение к MySql после потери соединения - PullRequest
4 голосов
/ 12 сентября 2009

У меня есть приложение ac #, которое использует базу данных MySql, проблема в том, что после определенного периода бездействия (8 часов) или когда соединение с сервером, где база данных является хостом, теряется, соединение с базой данных закрывается и запросы к базе данных не могут быть казненным. как включить автоматическое переподключение к базе данных.

С уважением.

Ответы [ 5 ]

2 голосов
/ 22 сентября 2009

Я думаю, первое, на что следует обратить внимание, почему соединение будет открыто в течение 8 часов подряд?

Я думаю, что в большинстве случаев вы подключаетесь к базе данных, делаете свое дело и закрываете ее:

using (var conn = new MySqlConnection(connString))
{
  // do what you need here
}

Блок using создаст соединение, которое действует только внутри блока. Когда блок заканчивается, метод Dispose вызывается для соединения и закрывает и правильно удаляет объект соединения. Это предотвратит использование вашим приложением доступных соединений, когда они не нужны.

Если вы находитесь в ситуации, когда вам необходимо определить, открыто ли соединение, ваша переменная соединения будет иметь свойство State, которое будет перечислением ConnectionState.

Вы можете проверить это, используя что-то вроде этого:

if (conn.State != ConnectionState.Open)
{
  conn = new MySqlConnection(connString);
}

Надеюсь, это поможет.

1 голос
/ 12 сентября 2009

В вашем приложении перед любыми запросами проверьте, активно ли ваше соединение. Если это не так, подключите его снова. Эт вуаля!

0 голосов
/ 22 сентября 2009

Спасибо за ваши ответы и предложения. У меня есть это требование, потому что постоянство делегировано неуправляемому коду, и в моем коде на C # я только обращаюсь к этому API.

Я решил свою проблему, изменив параметр MySQL wait_timeout, который имеет значение по умолчанию для периода бездействия 28800 секунд (8 часов).

0 голосов
/ 22 сентября 2009

Вы можете использовать опции keepalive и keepalivetimeout в строке подключения. Для этого лучше всего использовать MySqlConnectionStringBuilder.

0 голосов
/ 12 сентября 2009

Запустите команду подключения еще раз, если попытка доступа к базе данных не удалась.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...