2014-02-15 1 views
1

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

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

У кого-нибудь есть решение для этого? Я надеюсь, что это так. С уважением Rob Baaij ------------------------------------------- --------- мой C# исходный код личное соединение MySqlConnection; private string _server = "Server = 5.666.82.191; Database = unknown; 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

Что делать, если «Исключение» выбрано ... не «MySqlException»? –

+2

Возможно, строка подключения неверна. Это в конечном итоге «тайм-аут»? – user2864740

+0

Нет, нет. Он висит бесконечно. Я не знаю почему. Я думаю, что время ожидания по умолчанию составляет 30 секунд. – user3312861

ответ

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

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

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