如何告诉app在抛出异常后停止处理

时间:2014-06-05 14:01:28

标签: c# mysql

我的应用程序设置为连接到MySQL数据库。当它在线时它会好起来的。 我的查询是当它处于脱机状态时,即使在消息框中显示“无法连接到数据库”异常消息后,Visual Studio也会抛出异常。

我将连接参数放在他们自己的类中。大多数声明都是根据公共类声明作出的。

// Command to open connection to database
    public bool OpenCon()
    {

        try
        {
            con.Open();
            return true;
        }
        catch (MySqlException ex)
        {
            MessageBox.Show(ex.Message);
            return false;
            //I was hoping to get the application to stop processing further after it failed to connect here.
        }

    }

    // Command to close connection to database
    public bool CloseCon()
    {
        try
        {
            con.Close();
            return true;
        }

        catch (MySqlException ex)
        {
            MessageBox.Show(ex.Message);
            return false;

        }

    }

    // This method is triggered by the 'signup_Click' event in the signup window
    public void Join(signup Signup)
    {
        // We now have the existing login window as "Signup".

        //Query to excecute
        query = "insert into temp.signup (member, first, second, third, surname, sex, ......) values ('" + Signup.member.Text + "', '" + Signup.first.Text + "','" + Signup.second.Text + "','" + Signup.third.Text + "','" + Signup.surname.Text + "', '" + Signup.sex.Text + "',....... );";
        //Declarations
        MySqlDataReader rdr;
        cmd = new MySqlCommand(query, con);



        // Excecution
        try
        {
            //Open the connection
            OpenCon();

            //Excecute the command
            //This is where the exception is thrown when the computer is offline, by the data reader.
            rdr = cmd.ExecuteReader();
            //Show the confirmation message
            Xceed.Wpf.Toolkit.MessageBox.Show("Saved");

            //CLose the connection
            CloseCon();
        }
        //If this fails, catch the exception
        catch (MySqlException ex)
        {
            //And show it in a messagebox
            MessageBox.Show(ex.Message);
            CloseCon();
        }
    }

我显然错了,因为这种情况正在发生,但我的印象是,在您使用返回关键字退出方法后处理停止,或者在抛出异常时默认情况下处理停止。

所以我的问题是,如果'OpenCon'方法返回false(无法连接到数据库),我怎么告诉它停止进一步?

我希望它不会抛出暂停我的应用程序的第二个异常,只是等待进一步的指示。

2 个答案:

答案 0 :(得分:2)

你可以这样做

if(OpenCon())
{
            //Excecute the command
            //This is where the exception is thrown when the computer is offline, by the data reader.
            rdr = cmd.ExecuteReader();
            //Show the confirmation message
            Xceed.Wpf.Toolkit.MessageBox.Show("Saved");

            //CLose the connection
            CloseCon();
}

很好,你有一个bool返回值,检查它并采取进一步行动。

答案 1 :(得分:0)

如果抛出异常,应用程序不会终止。在外行人的术语中,如果在应用程序的任何地方没有发现异常,则CLR会强制终止应用程序。由于您已经处理了异常并且没有重新抛出异常,因此CLR假定您已“处理”异常并继续执行其余代码。

我假设你想强制终止catch块中的应用程序。这是非常糟糕的做法,超过了异常处理的全部目的。您应该优雅地通知用户并继续执行备用方案。 但是为了您的知识,您可以使用Environment.FailFast立即强行退出应用程序。这是非常不鼓励的,因为它甚至在没有执行任何finally块的情况下终止应用程序,并且应该避免,除非它是灾难性的失败。

最好抛出一个自定义异常并让它冒泡,以便您可以在UI层安全地捕获它,通知用户。