2016-07-09 4 views
3

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の静的コンストラクタでコードをラップしようとしました。それは役に立たなかった。プログラムはまだ同じ方法でクラッシュしました。

ありがとうございました。


try-catchラッパーと同じコードです。それはまだ同じエラーで失敗します。C#で例外をキャッチまたは取り扱い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 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

は、一般的に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); 
} 

また、あなたはAの最後に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

関連する問題