.net连接mysql报错的解决方案:System.Collections.Generic.KeyNotFoundException

报错信息
System.Collections.Generic.KeyNotFoundException: 'The given key was not present in the dictionary.'
报错代码

sql = "select * from test_table;"
List<MyClass> mydata = new List<MyClass>();
using (IDbConnection connection = GetMySQLConnection())
{
    mydata = connection.Query<MyClass>(sql).ToList();
}

情景还原
原有代码连接的是Mysql A,可以正常工作,但将数据库切换到新的Mysql B后,同一套代码报如上错误。
判断
代码没改动,那一定是两个数据库在配置上有差异。检查发现数据库B的my.cnf文件中设置了两个参数:

[mysqld]
init_connect='SET NAMES utf8mb4'
[client]
default-character-set=utf8mb4

而原有连接串指定的是charset=utf8,即

connection_string = "server=hostname;port=3306;user=xxx;password=123;database=test_db;Charset=utf8;"

解决

  1. 连接串删掉charset=utf8, 或者
  2. 将连接串中的字符集改为和Mysql B一致,即Charset=utf8mb4

注:utf8mb4是utf8的一个超集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值