Visual Studio及Web应用无法连接远程数据库但MySQL Workbench可连接求助
问题根因与修复方案
你当前使用的SqlConnection类是微软专为SQL Server数据库设计的连接类,无法用于连接MySQL数据库,这是所有连接报错的核心原因。你能通过MySQL Workbench正常连接,已经确认数据库本身、网络、账号权限都没有问题,问题完全出在应用侧的连接组件和连接字符串格式不匹配MySQL的要求。
第一步:安装MySQL官方.NET连接组件
你需要先安装MySQL官方的ADO.NET驱动,如果你用NuGet包管理,直接安装MySql.Data包即可,若是.NET Core/.NET 5+环境也可以选择性能更优的MySqlConnector包。
第二步:修改代码中的连接类
把原代码中使用的SqlConnection替换为MySQL对应的连接类:
原代码:
using (IDbConnection cnn = new SqlConnection(GetConnectionString()))
修改为(以MySql.Data包为例):
using (IDbConnection cnn = new MySqlConnection(GetConnectionString()))
注意要先引用对应命名空间using MySql.Data.MySqlClient;,如果用MySqlConnector则引用using MySqlConnector;。
第三步:修正连接字符串格式
MySQL的连接字符串格式和SQL Server完全不同,端口可以单独用port参数指定,也不需要Initial Catalog参数,改用Database指定库名,正确格式参考:
<connectionStrings> <add name="Database" connectionString="server=***.secureserver.net;port=你的MySQL端口(默认3306);database=ph16971171408_;uid=你的账号;pwd=你的密码;" /> </connectionStrings>
注:如果你的MySQL端口就是默认的3306,可以省略
port参数不写。
之前报错的原因说明
- 你之前收到的
Named Pipes Provider, error: 40是SQL Server连接失败的典型报错,因为SqlConnection默认会尝试用SQL Server的协议去连接你给的地址,自然识别不了MySQL服务 - 用逗号分隔端口是SQL Server连接字符串的规则,放到MySQL的连接逻辑里自然会报错,MySQL连接字符串的端口通过单独的
port参数指定即可,不需要拼在服务器地址后面。
内容的提问来源于stack exchange,提问作者Pacorg24
相关产品推荐
相关产品推荐

