C# “惊人的错误”;字典中不存在给定的键。”;

C# “惊人的错误”;字典中不存在给定的键。”;,c#,mysql,sql,C#,Mysql,Sql,我使用SqlCe作为我的数据库,但当我将所有表复制到MySql数据库时,这个异常开始了 我的代码: using (MySqlConnection conSQL = new MySqlConnection(conSQLSTR)) { try { conSQL.Open(); } catch (MySqlException e) { string errMsg = e.Message; MessageBox.Sh

我使用
SqlCe
作为我的数据库,但当我将所有表复制到
MySql
数据库时,这个异常开始了

我的代码:

using (MySqlConnection conSQL = new MySqlConnection(conSQLSTR))
{
    try
    {
        conSQL.Open();
    }
    catch (MySqlException e)
    {
        string errMsg = e.Message;
        MessageBox.Show(errMsg, "error", MessageBoxButtons.OK,
                         MessageBoxIcon.Error);
        return false;
    }
    using (MySqlCommand comSQL = conSQL.CreateCommand())
    {
        comSQL.CommandText = "SELECT " + Column + " FROM " + TableName
                                + " WHERE " + Column + "=@param";
        comSQL.Parameters.Add("@param", MySqlDbType.VarChar);
        comSQL.Parameters["@param"].Value = Value;
        MySqlDataReader drSQL;
        bool hasRows = false;
        try
        {
            drSQL = comSQL.ExecuteReader();
            hasRows = drSQL.Read();
        }
        catch (MySqlException e)
        {
            string errMsg =e.Message;
            MessageBox.Show(errMsg, "error", MessageBoxButtons.OK, 
                             MessageBoxIcon.Error);
        }
        if (!hasRows)
            return false;
        else
        {
            return true;
        };
    }
}
例外情况:

字典中不存在给定的键

行:

这很有趣,因为此异常未显示在消息框中!这就像一个运行时错误,我的
TRY
似乎根本不起作用

using (MySqlConnection conSQL = new MySqlConnection(conSQLSTR))

后台MySQL将使用
字典
将连接字符串解析为键/值对。确保您的连接字符串格式正确

这是一条非常惊人的mysql连接器错误消息,因为它太笼统,没有描述太多细节或确切问题来源的线索


当您看到此错误时,您应该检查传递给最近mysql执行的命令的任何字符串,特别是
ConnectionString
数据库名
表名
列名

,以了解其价值,因为此线程有点旧。但今天我遇到了同样的错误。起初还不清楚出了什么问题

将MariaDB升级到10.0.24-MariaDB-7(Ubuntu 16.04)后,我的.Net应用程序在打开连接时出错:“字典中不存在给定的密钥。”


将mysql.data.dll更新为最新版本修复了此问题。()

错误通常是惊人的。。更令人惊讶的是:)您的尝试没有成功,因为您正在捕获
MySqlException
,而不是
Exception
,您只捕获
MySqlException
。听起来这不是一个例外。你在哪里看到的?你得到完整的堆栈跟踪了吗?还要注意的是,在
else
块末尾不需要分号,您可以删除整个
if/else
块,只需使用
return hasRows。我认为我的橡皮鸭+乔恩的评论让索纳的评论不那么令人惊讶:)
using (MySqlConnection conSQL = new MySqlConnection(conSQLSTR))