0

MySQL コネクタによってスローされた例外をキャッチできないようです。私は意図的に接続文字列の設定をファブし、ヒットc.Open()すると例外が発生してそこで停止します。なぜ捕まらないのでしょうか?Throw New Exception()そのブロックで使用すると、期待どおりに機能します。

string cString = string.Format( @"server={0};User Id={1};password={2};Persist Security Info=True;database={3}",
                 tbMySQLServer.Text, tbMySQLUser.Text, tbMySQLPw.Text, tbMySQLDB.Text );
MySql.Data.MySqlClient.MySqlConnection c = new MySql.Data.MySqlClient.MySqlConnection( cString );;
try
{
    c.Open();
    tbMySQLTestResult.Text = "Success!";

    if ( cString != Properties.Settings.Default.commvetgenboxConnectionString )
    {
        DialogResult dr = MessageBox.Show( "Would you like to save this new connection string?",
                    "Save?", MessageBoxButtons.YesNo, MessageBoxIcon.Question );

        if ( dr == DialogResult.Yes )
        {
            Properties.Settings.Default.commvetgenboxConnectionString = cString;
            Properties.Settings.Default.Save();
        }
    }
}
catch ( Exception ex )
{
    logger.ErrorException( "Error accessing database", ex );
    MessageBox.Show( "Error opening database./r/nSee log for detailed information./r/n" + ex.Message,
                "Error", MessageBoxButtons.OK, MessageBoxIcon.Error );
    tbMySQLTestResult.Text = "Error";
}
finally
{
    if ( c.State == System.Data.ConnectionState.Open )
    {
        c.Close();
    }
}

編集:ヒットしたときの例外は次のc.Open()とおりです:

MySql.Data.MySqlClient.MySqlException occurred
Message=Access denied for user 'ro'@'localhost' (using password: YES)
Source=MySql.Data
ErrorCode=-2147467259
Number=1045
StackTrace:
   at MySql.Data.MySqlClient.MySqlStream.ReadPacket()
InnerException: 
4

2 に答える 2

0

接続文字列を変更してみてください。MySql の場合、基本的な形式は次のようになります。

サーバー=myServerAddress;データベース=myDataBase;Uid=myUsername;Pwd=myPassword;

于 2013-04-17T22:31:07.677 に答える
0

間違いなくタイムアウトの問題です。デフォルト設定に基づいて接続がタイムアウトするのを待つか、5 秒程度のタイムアウトを明示的に設定すると、例外をキャッチできるはずです。

于 2013-04-17T21:38:33.367 に答える