我的应用程序设置为连接到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(无法连接到数据库),我怎么告诉它停止进一步?
我希望它不会抛出暂停我的应用程序的第二个异常,只是等待进一步的指示。
答案 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层安全地捕获它,通知用户。