Windows Server 2022下MySqlConnection.Open()抛DBNull转换异常求助
问题描述
用C#编写的MariaDB连接程序在Windows 10/11环境运行正常,但部署到Windows Server 2022时,调用Database.Open()抛出以下异常:
System.InvalidCastException: Object cannot be cast from DBNull to other types. at System.DBNull.System.IConvertible.ToInt32(IFormatProvider provider) at System.Convert.ToInt32(Object value, IFormatProvider provider) at MySql.Data.MySqlClient.Driver.LoadCharacterSets(MySqlConnection connection) at MySql.Data.MySqlClient.Driver.Configure(MySqlConnection connection) at MySql.Data.MySqlClient.MySqlConnection.Open() at MariaDB.Program.StartAPI()
已确认MariaDB运行正常、SSL功能可用、用户权限配置正确、端口设置无误,求可行的解决思路。
程序完整代码:
using System; using MySql.Data.MySqlClient; namespace MariaDB { internal class Program { MySqlConnection Database = new MySqlConnection("Server=127.0.0.1; Port=3306; Database=test; Uid=user; Pwd=MyPassword; Ssl Mode=Required; convert zero datetime=True;"); static void Main(string[] args) { Program p = new Program(); p.OpenDB(); } private void OpenDB() { Database.Open(); Console.WriteLine("Ok"); Console.ReadLine(); } } }
解决思路
- 替换数据库驱动:
MySql.Data官方维护进度缓慢,对MariaDB 10.11.x版本的兼容性存在瑕疵。建议改用MySqlConnector(当前维护活跃的MySQL/MariaDB驱动库),替换后只需将代码中的命名空间从MySql.Data.MySqlClient改为MySqlConnector,连接字符串可直接复用。 - 连接字符串显式指定字符集:在连接字符串中添加
Character Set=utf8mb4参数,避免驱动自动加载字符集时读取到DBNull值。修改后的连接字符串示例:Server=127.0.0.1; Port=3306; Database=test; Uid=user; Pwd=MyPassword; Ssl Mode=Required; convert zero datetime=True; Character Set=utf8mb4; - 检查MariaDB字符集配置:登录MariaDB执行以下命令,确认字符集相关配置无异常值,避免驱动加载字符集元数据时获取到null字段:
SHOW VARIABLES LIKE 'character_set_%'; SHOW VARIABLES LIKE 'collation_%'; - 升级
MySql.Data驱动版本:如果坚持使用原驱动,请升级到最新稳定版,确保其支持MariaDB 10.11.x的字符集特性。
内容的提问来源于stack exchange,提问作者AdamA
相关产品推荐
相关产品推荐

