.Net MySql 错误“字典中不存在给定的键”

Ram*_*nas 5 .net c# mysql

尝试从表中获取简单计数会导致异常波纹管。尝试了不同的选择语句,这也有例外:“ SELECT * FROM goods”,但是“ SELECT col1, col2 FROM goods” - 无一例外。我究竟做错了什么?从工作台这些选择作品。

字典中不存在给定的键。System.Collections.Generic.KeyNotFoundException:字典中不存在给定的键。在 System.Collections.Generic.Dictionary`2.get_Item(TKey key) 在 MySql.Data.MySqlClient.MySqlField.SetFieldEncoding() 在 MySql.Data.MySqlClient.NativeDriver.GetColumnData(MySqlField field)
在 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(Driver d, Int32 statementId, Int32 numCols) 在 MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force) 在 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) 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();
}
Run Code Online (Sandbox Code Playgroud)

到数据库的连接字符串: Server=localhost; Database=art; Uid=ramunas; Pwd=xxxx; AllowUserVariables=True;

Raf*_*eto 6

我已经解决了您同样的错误,只需将字符集添加到连接字符串中即可:

Server=myServer;Port=3306;Database=myDB15;User ID=usr33;Password=usr33P;CharSet=utf8;
Run Code Online (Sandbox Code Playgroud)

就我而言,我将 MySql 连接器用于 .Net 6.9.3 版。连接到 30 个具有相同结构、相同排序规则 ( utf8_unicode_ci ) 和不同表内容的相同数据库。

当我运行MySqlCommand.ExecuteReader()方法从用户表中选择内容时,在某些数据库(30 个中的 4 个)中出现相同的错误The given key is not present in the dictionary

  • `MySql.Data.EntityFramework` 已弃用。使用 `MySql.EntityFrameworkCore` 代替 (2认同)

小智 6

在花了 5 个小时研究如何修复它之后!!!...我终于想通了...您所需要做的就是确保您的“MySql.Data.dll”是最新的!你可以在某个地方下载它。或者你可以在这里找到它 C:\Program Files (x86)\MySQL\MySQL Installer for Windows\MySql.Data.dll .. :D


Ram*_*nas 4

代码是正确的,所有建议也应该有效。刚刚删除了“排序规则服务器”设置并重新启动了服务器,一切都按预期进行。

在此输入图像描述