我使用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
似乎根本不工作!
using (MySqlConnection conSQL = new MySqlConnection(conSQLSTR))
在后台,MySQL将使用Dictionary
将您的连接字符串解析为键/值对。请确保连接字符串格式正确。
这是一条非常令人惊叹的mysql连接器错误消息,因为它太笼统了,没有描述太多细节或确切问题来源的线索。
当您看到此错误时,您应该检查传递给最新mysql执行命令的任何字符串,特别是ConnectionString
、Database Name
、Table Name
、Column Names
。
因为这个线程有点旧,所以值得一提。但今天我遇到了同样的错误。起初还不清楚出了什么问题。
在将我们的MariaDB升级到10.0.24-MariaDB-7(Ubuntu 16.04)后,我的.Net应用程序在打开连接时出错:"字典中不存在给定的密钥。".
将mysql.data.dll更新到最新版本修复了此问题(https://dev.mysql.com/downloads/connector/net/6.9.html)