.Net MySql错误“字典中不存在给定的键" [英] .Net MySql error "The given key was not present in the dictionary"
问题描述
尝试从表中获取简单计数会导致异常情况.
尝试了不同的选择状态,这也会导致异常:"SELECT * FROM goods
",但"SELECT col1, col2 FROM goods
"-毫无例外.我究竟做错了什么?从工作台中选择这些作品.
Trying to get simple count from table results in exception bellow.
Tried different select statemens which also makes exception: "SELECT * FROM goods
", but "SELECT col1, col2 FROM goods
" - works without exception. What am I doing wrong? From workbench these selects works.
字典中不存在给定的键. System.Collections.Generic.KeyNotFoundException:给定的密钥不是 出现在字典中.在 System.Collections.Generic.Dictionary`2.get_Item(TKey键)位于 MySql.Data.MySqlClient.MySqlField.SetFieldEncoding()在 MySql.Data.MySqlClient.NativeDriver.GetColumnData(MySqlField字段)
在MySql.Data.MySqlClient.NativeDriver.GetColumnsData(MySqlField [] 列)位于MySql.Data.MySqlClient.Driver.GetColumns(Int32 count)
在MySql.Data.MySqlClient.ResultSet.LoadColumns(Int32 numCols)在 MySql.Data.MySqlClient.ResultSet..ctor(驱动程序d,Int32 statementId, MySql.Data.MySqlClient.Driver.NextResult(Int32上的Int32 numCols) statementId,布尔值),位于 MySql.Data.MySqlClient.MySqlDataReader.NextResult()在 MySql.Data.MySqlClient.MySqlDataReader.Close()在 MySql.Data.MySqlClient.MySqlCommand.ResetReader()在 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior 行为)位于MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()
在MySqlSybaseComparer.DbTester.Test(String& error)中 c:\ MySqlSybaseComparer \ DbTester.cs:第68行
The given key was not present in the dictionary. System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary. at System.Collections.Generic.Dictionary`2.get_Item(TKey key) at MySql.Data.MySqlClient.MySqlField.SetFieldEncoding() at MySql.Data.MySqlClient.NativeDriver.GetColumnData(MySqlField field)
at MySql.Data.MySqlClient.NativeDriver.GetColumnsData(MySqlField[] columns) at MySql.Data.MySqlClient.Driver.GetColumns(Int32 count)
at MySql.Data.MySqlClient.ResultSet.LoadColumns(Int32 numCols) at MySql.Data.MySqlClient.ResultSet..ctor(Driver d, Int32 statementId, Int32 numCols) at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force) at MySql.Data.MySqlClient.MySqlDataReader.NextResult() at MySql.Data.MySqlClient.MySqlDataReader.Close() at MySql.Data.MySqlClient.MySqlCommand.ResetReader() at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()
at MySqlSybaseComparer.DbTester.Test(String& error) in c:\MySqlSybaseComparer\DbTester.cs:line 68
代码段:
using (MySqlConnection conn = new MySqlConnection(ConStrMySql))
{
try
{
conn.Open();
using (MySqlCommand cmd = new MySqlCommand("SELECT count(*) FROM goods", conn))
{
using (MySqlDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
MessageBox.Show(reader[0].ToString());
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + Environment.NewLine + ex.ToString(););
}
conn.Close();
}
与数据库的连接字符串:Server=localhost; Database=art; Uid=ramunas; Pwd=xxxx; AllowUserVariables=True;
Connection string to DB: Server=localhost; Database=art; Uid=ramunas; Pwd=xxxx; AllowUserVariables=True;
推荐答案
代码正确,所有建议也应有效.只需删除排序规则服务器"设置并重新启动服务器,一切都会按预期进行.
Code is correct and all suggestion also should work. Just removed "collation-server" settings and restarted server and everything works as expected.
这篇关于.Net MySql错误“字典中不存在给定的键"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!