如果 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();
上崩溃并出现错误;
An unhandled exception of type
'System.Security.Cryptography.CryptographicException' occurred in MySql.Data.dll Additional information: The system cannot find the file specified.
请注意:如果 CertificatePassword
或 CertificateFile
正确,则此代码可以完美运行。此外,如果用户输入除 CertificatePassword
或 CertificateFile
以外的任何错误内容,应用程序都会向用户返回一条错误消息。
我只是想让用户有机会修复他们的错误,而不必重新启动应用程序。
最佳答案
问题是您的代码仅在类型为 MySqlException
时捕获异常。 。其他任何内容都会被传回调用堆栈,或者正如您所发现的那样,将导致您的应用程序终止。您可以 try catch 该特定异常,在本例中为 CryptographicException
通过添加另一个 catch block :
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
}
关于C# MySqlConnection 应用程序因证书信息不正确而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45721359/