MySqlConnection 连本地 MySQL 失败的常见原因:未启动 MySQL 服务、认证方式不兼容(如 caching_sha2_password 与旧版驱动冲突)、未安装正确驱动(如 MySqlConnector)、连接字符串配置错误。

直接说结论:Visual Studio 本身不“连接数据库”,它只是提供工具链和 IDE 支持;真正建立数据库连接的是 C# 代码(通过 ADO.NET 或 ORM),而连接能否成功,取决于你选的驱动、连接字符串写法、网络可达性、权限配置这四点——缺一不可。
MySqlConnection 连接本地 MySQL 时连不上,常见原因是什么?
- 连接字符串里用了
localhost却没启动 MySQL 服务(检查 Windows 服务列表是否有MySQL80,或运行net start | findstr MySQL) - MySQL 8.0 默认用
caching_sha2_password认证方式,但老版MySql.DataNuGet 包(如 8.0.22 之前)不支持,会报错:Client does not support authentication protocol - 解决方法是改用户认证方式:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';<br>FLUSH PRIVILEGES;
- 忘了装驱动:必须安装
MySql.Data(.NET Framework)或MySqlConnector(推荐,纯 .NET Standard,无 native 依赖)NuGet 包,不能只靠 Visual Studio 的“服务器资源管理器”点几下就完事
SqlConnection 连 Azure SQL 或本地 SQL Server 总提示“登录失败”,怎么调?
- 错误信息如果是
Login failed for user 'xxx',先确认:- 用户名密码没错(Azure SQL 不支持
sa,得用创建服务器时设的管理员账号) - Azure SQL 必须在 portal 配置服务器级防火墙规则,把客户端 IP 加进去(或开“允许 Azure 服务和资源访问此服务器”)
- 本地 SQL Server 如果用 Windows 身份验证,连接字符串里不能写
User ID和Password,得用Integrated Security=true
- 用户名密码没错(Azure SQL 不支持
- 连接字符串格式差异大:
- 本地 SQL Server Express:
Data Source=DESKTOP-XXX\SQLEXPRESS;Initial Catalog=mydb;Integrated Security=true; - Azure SQL:
Server=tcp:myserver.database.windows.net,1433;Initial Catalog=mydb;User ID=myuser;Password=mypass;Encrypt=true;TrustServerCertificate=false;Connection Timeout=30;
- 本地 SQL Server Express:
- 少写了
Encrypt=true或TrustServerCertificate=false,Azure SQL 会直接拒绝连接(强制 TLS)
在 appsettings.json 里配连接字符串,为什么 IConfiguration 读不到?
- 最常见的是没把
appsettings.json的Copy to Output Directory属性设为Copy always或Copy if newer(右键文件 → 属性 → 复制到输出目录) - 连接字符串节点名写错,比如写成
"ConnString",但代码里写Configuration.GetConnectionString("DefaultConnection") - ASP.NET Core 项目中,如果用的是
Microsoft.Data.SqlClient,注意它不认Server=(local)这种写法,得明确写成Server=localhost或Server=. - 没在
Program.cs里注册配置服务(.NET 6+):var builder = WebApplication.CreateBuilder(args);<br>// 下面这行必须有<br>builder.Configuration.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
Visual Studio 的“服务器资源管理器”里能连上,不代表你的 C# 代码也能连——它用的是 IDE 内置驱动,和你项目引用的 NuGet 包完全无关。实际部署时,所有连接逻辑都得靠你自己写的代码和引用的驱动扛住,这点最容易被忽略。


















