Программа зависает бесконечно при вызове MySqlConnection.Open()

Я использую MySqlConnection для доступа к удаленной базе данных. Он отлично работает на большинстве компьютеров.

Тем не мение. Теперь у меня есть случай, в котором вызов MySqlConnection.Open() зависает навсегда. Я добавил несколько операторов write, чтобы увидеть, где он висит. Смотрите код ниже. Оператор "_Debug.Write("OpenConnection", " Соединение установлено.");" никогда не достигается Также не исключение не выбрасывается. Я пытался запустить приложение от имени администратора, но оно все еще висит здесь. Это должно быть проблемой среды, так как она отлично работает на всех других компьютерах. (Я использую.NET Framework 3.5)

У кого-нибудь есть решение для этого? Я надеюсь, что это так. С наилучшими пожеланиями Роб Baaij ---------------------------------------------------- мой C# исходный код частного подключения MySqlConnection; приватная строка _server = "Сервер =5.666.82.191; База данных = неизвестно;Uid=me;Pwd=mypasswd";

   public void getUserData()
    {
        using (connection = new MySqlConnection(_server))
        {
            if (OpenConnection())
            {
                getData();

                connection.Close();
            }
        }
    }

     private bool OpenConnection()
    {
        bDatabaseConnectionSucceeded = false;
        try
        {
            _Debug.Write("OpenConnection", "Opening connection now!!");
            connection.Open();
            bDatabaseConnectionSucceeded = true;
            _Debug.Write("OpenConnection", "Connection succeeded.");
            return true;
        }
        catch (MySqlException ex)
        {
            _Debug.Write("OpenConnection", "Connection failed." + ex.Message);
            Debug.WriteLine(ex.Message);
            return false;
        }
    }

1 ответ

  1. Вам не нужно делать connection.close(); Это избыточно, так как оно создано в using блок.

  2. Зачем ждать открытия соединения? Почему бы не раскрутить другой поток, который вы ожидаете в текущем потоке? Если он не отвечает, вы можете оставить без забот и повторить попытку позже.

Это особенно полезно, если вы подключаетесь к удаленному серверу и теряете интернет-соединение. connnection.open() не будет зависать бесконечно, но он будет висеть на своей нити в течение нежелательного периода времени.

Другие вопросы по тегам