Можно ли создать событие и обработать его, если потеряно соединение с сервером MySQL? - PullRequest
0 голосов
/ 04 июня 2009

Допустим, у меня есть клиентское приложение, и оно подключается к серверу MySQL. Фантастика. Я не реализую это как поток. Я просто использую класс MySQLConnection.

А теперь давайте скажем, что Джим, который действительно небрежно относится к офису, случайно перезагружает сервер MySQL, не спрашивая разрешения вначале.

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

Я могу придумать несколько способов проверить это, но я не знаю, будут ли они работать и даже элегантны ли они по дизайну. Мне было интересно, что вы, ребята, считаете наиболее подходящим способом.

  • Реализуйте соединение как поток и проверяйте его каждые x секунд (если это возможно)
  • Создание и обработка события, когда соединение прерывается (в некотором роде, как указано выше)
  • Может быть, в библиотеку MySQL Connector встроено событие, о котором я даже не знаю
  • Какой-то другой мистический мрачный код, о котором я не знаю

Любая помощь очень ценится.

Редактировать : Ответ на этот вопрос в комментариях. Спасибо за чтение.

1 Ответ

0 голосов
/ 04 июня 2009

У меня есть приложение "время от времени подключалось", и я столкнулся с этой проблемой. Мне нужно было знать, было ли у пользователя сетевое соединение и, если они имели, было ли у него VPN-соединение, которое позволяло бы им подключаться к базе данных SQL Server. Я использовал таймер для проверки связи с сервером базы данных раз в минуту, чтобы проверить его достижимость.

    public NetworkStatus GetNetworkStatus()
    {
        NetworkStatus netStatus = new NetworkStatus();
        netStatus.NetworkAvailable = NetworkInterface.GetIsNetworkAvailable();

        try
        {
            if (netStatus.NetworkAvailable)
            {
                Ping p = new Ping();
                // Create a buffer of 32 bytes of data to be transmitted.
                string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
                byte[] buffer = Encoding.ASCII.GetBytes(data);
                PingReply reply = p.Send(DB_SERVER_NAME, 1200, buffer);
                netStatus.PublisherPingSuccess = reply.Status == IPStatus.Success;
            }
        }
        catch (Exception ex)
        {
            netStatus.PublisherPingSuccess = false;
            netStatus.Error = ex;
        } 
        return netStatus;
    }
...