.NET5连接MySQL登录时出现KeyNotFoundException及SQL语法错误求助
问题排查与解决办法
1. 原MySql.Data 8.0.17版本依赖缺失问题
该报错是因为8.0.17版本的MySql.Data对.NET 5.0的兼容性不完善,强制依赖.NET Framework下的System.Management 4.0.0.0程序集,.NET 5.0运行时无法加载该版本程序集。
解决方式二选一:
- 直接升级MySql.Data到8.0.33及以上版本,高版本已修复.NET 5.0下的依赖兼容问题
- 替换MySql.Data为MySqlConnector库,该库是目前.NET生态下兼容性更好、维护更活跃的MySQL驱动,可直接通过NuGet搜索安装
不需要降级到6.1.2这类过老的驱动版本,可从根源避免后续字符集兼容问题。
2. 6.1.2版本utf8mb4字符集不存在报错
6.1.2版本的MySql.Data发布时间远早于utf8mb4字符集普及的时间,驱动内置的字符集映射字典中没有收录utf8mb4标识,哪怕连接字符串指定了CharSet=utf8,只要你的MySQL服务端、库、表或对应查询字段使用了utf8mb4编码,服务端返回的字符集标识就会触发该异常。
如果坚持使用6.1.2版本,需要手动将整个库、所有表、所有字符串类型字段的字符集修改为utf8(即utf8mb3,仅支持3字节长度的Unicode字符),否则建议直接使用高版本驱动,从根源解决该问题。
3. 用户名存在性校验SQL语法错误
该报错是因为你错误使用单引号包裹表名和字段名:SQL语法中单引号仅用于包裹字符串字面量,表名、字段名如果需要转义(比如user是MySQL内置关键字,必须转义),需要使用反引号(键盘ESC键下方的`符号)包裹。
将查询语句修改为如下内容即可:
string query = "SELECT * FROM `user` WHERE `username`=@un";
内容的提问来源于stack exchange,提问作者Filip
相关产品推荐
相关产品推荐

