本地网络中C#连接MariaDB出现Named Pipes Provider错误
问题根源与解决方案
哦,我一眼就揪出问题啦!你踩了个超级常见的新手坑——你用的SqlConnection是专门给Microsoft SQL Server用的连接类,完全不兼容MariaDB/MySQL!这就是为啥错误提示会扯到SQL Server的Named Pipes,跟你的CentOS上的数据库配置半毛钱关系都没有。
解决步骤
1. 安装正确的MariaDB/MySQL驱动
首先你需要在项目里安装适配MariaDB的.NET驱动,推荐用MySqlConnector(这是目前维护最活跃的开源驱动,比官方的MySQL.Data更靠谱):
- 打开NuGet包管理器控制台,运行:
Install-Package MySqlConnector - 或者在Visual Studio的NuGet包管理器界面搜索
MySqlConnector并安装
2. 修改代码适配MariaDB
把SQL Server相关的类替换成MySqlConnector的类,同时调整连接字符串的格式(MariaDB的参数和SQL Server不一样):
修改后的代码示例:
// 记得先引入命名空间 using MySqlConnector; // ... 你的其他代码 ... // 注意连接字符串的参数:用Server/Database/Uid/Pwd,而不是SQL Server的Data Source/Initial Catalog string connectionString = $"Server=192.168.0.6;Port=3306;Database=cloud_calendar;Uid=calendar_user;Pwd={SQL_PASSWORD};"; // 用using块自动管理连接,避免忘记关闭 using (MySqlConnection connection = new MySqlConnection(connectionString)) { try { connection.Open(); MessageBox.Show("数据库连接成功!"); } catch (Exception e) { string msg = $"数据库连接失败:{e.Message}"; MessageBox.Show(msg); } }
3. 额外检查项(以防万一)
虽然你说已经配置了远程权限,但可以再确认下:
- 登录MariaDB服务器,执行
SELECT User, Host FROM mysql.user WHERE User='calendar_user';,确保Host列是%(允许所有IP连接)或者你的Windows客户端的具体IP - 检查CentOS的防火墙是否放行3306端口:运行
firewall-cmd --list-ports,看看有没有3306/tcp,如果没有就添加:firewall-cmd --add-port=3306/tcp --permanent,然后重启防火墙firewall-cmd --reload
内容的提问来源于stack exchange,提问作者Mox_z
相关产品推荐
相关产品推荐

