2016-07-09 1 views
3

My C# программа работает с базой данных MySQL.Исключения MySQL не обнаружены (C#)

По какой-то причине программа не может поймать исключения, вызвавшие мое соединение с MySQL.

Пример:

Если я учетные данные в строке подключения недействителен, программа падает, как это (даже при работе в отладчике): http://imgur.com/SfzkVdW

Код подключения выглядит так:

using MySQLDriverCS; 

namespace XXX 
{ 
    public class Data 
    { 
     private static MySQLConnection con; 

     static Data() 
     { 
      string connectionString = new MySQLConnectionString("XXX", 
       "XXX", 
       "XXX", 
       "XXX").AsString; 

      con = new MySQLConnection(connectionString + ";CharSet=utf8"); 
      con.Open(); // For testing the connection 
      con.Close(); 
     } 
... 

Любые идеи о том, как я могу улучшить ситуацию и начать перехватывать исключения MySQL?

Я попытался обернуть код в статическом конструкторе в try-catch. Это не помогло. Программа по-прежнему разбилась точно так же.

Спасибо.


Тот же код с оберткой с пробкой. Он по-прежнему не удается с той же ошибкой: http://imgur.com/SfzkVdW

static Data() 
    { 
     try 
     { 
      string connectionString = new MySQLConnectionString("XXX", 
       "XXX", 
       "XXX", 
       "XXX").AsString; 

      con = new MySQLConnection(connectionString + ";CharSet=utf8"); 
      con.Open(); // For testing the connection 
      con.Close(); 
     } 
     catch(Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
+0

Попробуйте просто передавая строку соединения в объект mysqlconnection вместо использования mysqlconnectionstring объект –

+0

"исключение n ot пойман ", потому что нет блока try-catch. Попробуйте добавить блок try-catch, и вы увидите ошибку. –

+1

Я попытался обернуть код в статическом конструкторе в try-catch. Это не помогло. Программа по-прежнему разбилась точно так же. – Louisa

ответ

2

Используйте соответствующий тип исключения в блоке catch.

Используйте соответствующие классы MySQL. не

using MySql.Data.MySqlClient; 

// class level var or whatnot: 
string connString = @"server=theHostName;userid=dbuser123;password=OpenSesame7;database=my_db_name"; 


public void connect() 
{ 
    try 
    { 
     conn = new MySqlConnection(connString); // read above comments for (conn) 
     conn.Open(); 
    } 
    catch (MySqlException ex) 
    { 
     MessageBoxButtons buttons = MessageBoxButtons.OK; 
     string s="MySqlException: "+ex.ToString(); 
     MessageBox.Show(s,"Error",buttons); 
    } 
    finally 
    { 
     if (conn != null) 
     { 
      //conn.Close(); 
     } 
    } 
} 

Ошибка Пойманный Нет проблем:

enter image description here

Добавление ссылки Скриншот:

enter image description here

+0

Я попытался обернуть код в статическом конструкторе в try-catch. Это не помогло. Программа по-прежнему разбилась точно так же. – Louisa

+0

Я попытаюсь испортить строку подключения – Drew

+0

Моя настройка здесь: http://stackoverflow.com/a/38089869/ – Drew

0

Catching или обработкой исключений в C#, как правило, требует try-catch заявления.

Синтаксис по существу следующим образом:

try 
{ 
    // operation likely to cause error 
} 
catch (Exception e){ 
    // handle error 
    Console.WriteLine("Exception: " + e); 
} 

Console.Read(); 

Так обернуть con.Open() логики в try-catch заявление так:

try 
{ 
    Con.Open(); 
} 
catch (Exception e){ 
    // handle error 
    Console.WriteLine("Possible MySQL Exception: " + e); 
} 

Кроме того, вы можете добавить finally блок к концу try-catch, который выполняет свой код независимо от того, было ли обработано исключение:

try 
{ 
    // attempt to do something here 
    con.Open(); 
} 
catch (Exception e){ 
    // handle error 
    Console.Writeline("Exception: " + e); 
} 
finally 
{ 
    Console.Writeline("This runs no matter if an exception is thrown or not!"); 
} 

Console.Read(); 
+0

Я попытался обернуть код в статическом конструкторе в try-catch. Это не помогло. Программа по-прежнему разбилась точно так же. – Louisa