2013-03-18 2 views
0

У меня возникло странное исключение при подключении.Open() к удаленной базе Mysql. Этот код работает нормально, но иногда эта ошибка выскакиваетИсключение в соединении mysql C#

Вот код:

private static string 
      DatabaseServer = "", 
      DatabasePort = "", 
      DatabaseName = "", 
      DatabaseUserID = "", 
      DatabasePassword = ""; 

    public static string ConnectionString = String.Format("SERVER={0};PORT={1};DATABASE={2};UID={3};PASSWORD={4}", 

       DatabaseServer, DatabasePort, DatabaseName, DatabaseUserID, DatabasePassword); 

       using (MySqlConnection connection = new MySqlConnection(ConnectionString)) 
       { 
        try 
        { 
         if (connection != null) 
         { 
          connection.Open(); 

          string query = @"...."; 

          MySqlCommand cmd = new MySqlCommand(query, connection); 
          cmd.CommandType = CommandType.Text; 

          using (MySqlDataReader dataReader = cmd.ExecuteReader()) 
          { 
           while (dataReader.Read()) 
           { 

           } 
          }   
         } 
        } 
        catch 
        {} 
       } 

Проблема заключается в том, когда речь идет в connection.Open();, даже если он находится в try {} catch {}, это завершающее приложение.

журнал Исключение:

System.Reflection.TargetInvocationException: An exception occurred during the operation, making the result invalid. Check InnerException for exception details. InnerException. ---> MySql.Data.MySqlClient.MySqlException: Unable to connect to any of the specified MySQL hosts. ---> System.Exception: Call to GetHostEntry failed after 00:00:00 while querying for hostname '': SocketErrorCode=TryAgain, ErrorCode=11002, NativeErrorCode=11002. ---> System.Net.Sockets.SocketException: This is usually a temporary error during hostname resolution and means that the local server did not receive a response from an authoritative server. 

    в System.Net.Dns.GetAddrInfo(String name) 
    в System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6) 
    в System.Net.Dns.GetHostEntry(String hostNameOrAddress) 
    в MySql.Data.Common.StreamCreator.GetDnsHostEntry(String hostname) 
    --- --- 
    в MySql.Data.Common.StreamCreator.GetDnsHostEntry(String hostname) 
    в MySql.Data.Common.StreamCreator.GetHostEntry(String hostname) 
    в MySql.Data.Common.StreamCreator.GetStreamFromHost(String pipeName, String hostName, UInt32 timeout) 
    в MySql.Data.Common.StreamCreator.GetStream(UInt32 timeout) 
    в MySql.Data.MySqlClient.NativeDriver.Open() 
    --- --- 
    в MySql.Data.MySqlClient.NativeDriver.Open() 
    в MySql.Data.MySqlClient.Driver.Open() 
    в MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings) 
    в MySql.Data.MySqlClient.MySqlPool.GetPooledConnection() 
    в MySql.Data.MySqlClient.MySqlPool.TryToGetDriver() 
    в MySql.Data.MySqlClient.MySqlPool.GetConnection() 
    в MySql.Data.MySqlClient.MySqlConnection.Open() 
    в System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e) 
    в System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument) 
    --- --- 
    в System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary() 
    в System.ComponentModel.RunWorkerCompletedEventArgs.get_Result() 
    в Server.Engines.DonateSQL.bw_RunWorkerCompleted(Object sender, RunWorkerCompletedEventArgs e) в System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e) 
    в System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg) 
    в System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state) 
    в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
    в System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 
    в System.Threading.ThreadPoolWorkQueue.Dispatch() 
    в System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() 

Я не знал, что делать. Пробовал все и не мог найти из-за того, что это происходит.

+3

Вы пытались прочитать сообщение об исключении? «странное исключение» --- что такое «странно»? – zerkms

+0

Проблема, что она работает нормально, но иногда эта ошибка происходит. – GladiatoR

+0

«странное исключение» для меня :) Потому что это происходит, пока все должно быть в порядке, и соединение возможно. – GladiatoR

ответ

0

Может ли быть сеть и/или вопрос DNS:

System.Reflection.TargetInvocationException: произошло исключение во время операции, что делает результат недействительным. Проверьте значение InnerException . InnerException. ---> MySql.Data.MySqlClient.MySqlException: Невозможно подключиться к любому из указанным хостам MySQL. ---> System.Exception: вызов GetHostEntry не выполнен после 00:00:00 при запросе имени хоста '': SocketErrorCode = TryAgain, ErrorCode = 11002, NativeErrorCode = 11002. ---> System.Net.Sockets.SocketException: Обычно это временная ошибка во время разрешения имени хоста и означает, что на локальном сервере получен ответ от авторитетного сервера.

+0

«Могла ли быть проблема с сетью и/или DNS:« Дополнительным доказательством вашего ответа является метод, по которому было исключено исключение: 'System.Net.Dns.GetAddrInfo (имя строки)' – zerkms

+0

Это можно решить, указав IP, а не DNS? – GladiatoR

+0

@GladiatoR Задание IP-адреса приведет к выходу DNS из изображения с точки зрения ошибки, но DNS не просто так что вам не нужно запоминать IP-адрес .. Вы тоже это потеряете. Использование IP-адреса не решает, оно уклоняется. –

2

System.Exception: Позвоните, чтобы GetHostEntry удалось после 00:00:00, а запрашивая имя хоста «»

взглянуть на код вызова, увидеть, если есть какая-то причина, почему DatabaseServer пустая строка. Если этого не происходит, тогда разбудите своих сетевых мальчиков, так как, похоже, у вашего DNS есть икота. Не знаете, что такое ваша настройка, но если вы можете позволить себе заменять имена IP-адресами, и это прекращается, тогда вы можете указать на них большой грязный палец.

+0

+1 за то, что бил меня , – Jsterman

+0

Попробует использовать IP и надеюсь, что он решит эту проблему. – GladiatoR

+0

Здесь строка базы данных пуста, потому что я удалил DNS-адрес перед отправкой. Проблема не в этом. – GladiatoR

Смежные вопросы