C# MySqlConnection 应用程序因证书信息不正确而崩溃

标签 c# mysql

如果 MySQL 连接的 CertificatePasswordCertificateFile 不正确,则会导致我的应用程序崩溃。这是一个问题的原因是用户是输入连接信息的人。这意味着,如果他们输入错误 CertificatePasswordCertificateFile,应用程序就会崩溃,而不是告诉他们错误消息。我认为在代码周围放置 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.

请注意:如果 CertificatePasswordCertificateFile 正确,则此代码可以完美运行。此外,如果用户输入除 CertificatePasswordCertificateFile 以外的任何错误内容,应用程序都会向用户返回一条错误消息。

我只是想让用户有机会修复他们的错误,而不必重新启动应用程序。

最佳答案

问题是您的代码仅在类型为 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/

相关文章:

java - Hibernate 和 MySQL 管道破裂

mysql - 非常持久/opt/lampp/bin/mysql.server : 264: kill: No such process. Xampp/ubuntu 16.04

mysql - 如何防止移动应用程序多次登录

php - 尝试向 MySQL 插入数据时出错

c# - 排除使用 Entity Framework 获取数据的列

c# - 引发事件与直接方法调用的区别

c# - 在窗口服务中检测关闭

mySQL脚本超时

c# - 使用 CodeDomProvider 隐藏命令提示符

c# - 添加 datagridviewcolumn 属性 designtime