令人惊讶的错误“字典中没有给定的密钥。”

时间:2013-11-23 13:15:19

标签: c# mysql sql

我使用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;
        };
    }
}

例外:

  

字典中没有给定的密钥。

行:

drSQL = comSQL.ExecuteReader();

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

3 个答案:

答案 0 :(得分:1)

using (MySqlConnection conSQL = new MySqlConnection(conSQLSTR))

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

答案 1 :(得分:1)

这是一个非常令人惊讶的 mysql连接器错误消息,因为它太通用了,没有详细说明或确切问题来源的线索。

当您看到此错误时,您应该检查传递的字符串到最近执行的mysql {0},ConnectionStringDatabase Name,{{1} }。

答案 2 :(得分:1)

因为这个线程有点旧,所以它的价值。但今天我遇到了同样的错误。起初它并不清楚出了什么问题。

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

将mysql.data.dll更新到最新版本修复它。 (https://dev.mysql.com/downloads/connector/net/6.9.html