如果MySQL连接的CertificatePassword
或CertificateFile
不正确,则会导致我的应用程序崩溃。 这是一个问题的原因是用户是输入连接信息的用户。 这意味着,如果他们输入错误CertificatePassword
或CertificateFile
应用程序将崩溃,而不是告诉他们错误消息。 我认为在代码周围放一个try
会起作用,但它没有。
try
{
MySqlConnection con = new MySqlConnection(conString);
MySqlDataAdapter da = new MySqlDataAdapter();
MySqlCommand cmd = new MySqlCommand(sqlCMD, con);
RSACryptoServiceProvider.UseMachineKeyStore = true;
var provider = new RSACryptoServiceProvider();
con.Open();
da.SelectCommand = cmd;
da.Fill(dt);
cmd.Dispose();
con.Close();
}
catch (MySqlException x)
{
//Error logic
}
应用程序在con.Open();
崩溃并出现错误;
类型的未处理异常
"System.Security.Cryptography.CryptographicException"发生在 MySql.Data.dll 其他信息:系统找不到该文件 指定。
请注意:如果CertificatePassword
或CertificateFile
正确,则此代码可以完美运行。 此外,如果用户输入除CertificatePassword
或CertificateFile
以外的任何错误,则应用程序将向用户返回错误消息。
我只是想让用户有机会修复他们的错误,而不必重新启动应用程序。
问题是您的代码仅在类型为MySqlException
时才捕获异常。其他任何内容都会传递回调用堆栈,或者正如您所发现的那样,将导致应用程序终止。您可以尝试捕获该特定异常,在本CryptographicException
例中,通过添加另一个 catch 块来
try
{
//snip
}
catch (MySqlException x)
{
//Error logic
}
catch(CryptographicException cex)
{
//logic to handle crypto exception
}
或者,您可以更改异常处理程序以捕获所有内容:
try
{
//snip
}
catch (Exception x)
{
//Error logic for all exceptions
}
您可以使用using
来处理连接并添加catch
异常
try
{
using MySqlConnection con = new MySqlConnection(conString)
{
MySqlDataAdapter da = new MySqlDataAdapter();
using MySqlCommand cmd = new MySqlCommand(sqlCMD, con)
{
RSACryptoServiceProvider.UseMachineKeyStore = true;
var provider = new RSACryptoServiceProvider();
con.Open();
da.SelectCommand = cmd;
da.Fill(dt);
}
}
}
catch (MySqlException x)
{
//Error logic
}
catch (Exception ex)
{
}