You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地网络中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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:04:54