C# (.NET Core 3.1) 无法连接Azure SQL数据库求助
排查Azure SQL数据库C#连接异常的步骤
针对你遇到的VS SQL Server对象资源管理器可正常连接,但C#代码调用conn.Open()时报错的问题,可按以下步骤逐一排查:
1. 修复连接字符串的格式错误
你的连接字符串开头Server关键字前多了一个空格:
string connStr = " Server=tcp:beaconsqlsql.database.windows.net,1433;..."
空格会导致SqlConnection无法正确解析服务器地址,这是触发该错误的常见原因。修正后的连接字符串应去掉开头空格:
string connStr = "Server=tcp:beaconsqlsql.database.windows.net,1433;Initial Catalog=MRP2;Persist Security Info=False;User ID=beaconadmin;Password=********;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;";
2. 更换为推荐的SQL客户端库
.NET Core 3.1默认的System.Data.SqlClient库对Azure SQL的兼容性不如微软官方推荐的Microsoft.Data.SqlClient。执行以下步骤更换:
- 在NuGet包管理器中卸载
System.Data.SqlClient - 安装
Microsoft.Data.SqlClient(版本≥2.0.0) - 修改代码中的命名空间引用为
using Microsoft.Data.SqlClient;,并将SqlConnection等对象替换为该库下的对应类型
3. 验证密码的正确性与格式
如果密码包含特殊字符(如;、"、=),直接写在连接字符串中会导致解析错误。建议使用SqlConnectionStringBuilder构建连接字符串,避免手动拼接的格式问题:
var builder = new SqlConnectionStringBuilder(); builder.DataSource = "beaconsqlsql.database.windows.net,1433"; builder.InitialCatalog = "MRP2"; builder.UserID = "beaconadmin"; builder.Password = "你的密码"; builder.Encrypt = true; builder.TrustServerCertificate = false; builder.ConnectTimeout = 30; string connStr = builder.ConnectionString;
4. 检查代理设置
如果你的电脑使用了网络代理,控制台应用可能未自动继承系统代理配置,导致无法连接Azure SQL。可在代码开头添加以下代码禁用代理:
System.Net.WebRequest.DefaultWebProxy = null;
或者确认代理是否允许访问Azure SQL的1433端口。
5. 确认Azure SQL的防火墙规则
虽然你已添加本机IP,但可再次登录Azure门户,检查防火墙规则是否包含当前网络的出口IP(部分网络环境下本机IP和出口IP不一致),同时可临时开启允许Azure服务和资源访问此服务器选项,测试是否是网络规则问题。
内容的提问来源于stack exchange,提问作者P. Szk.
相关产品推荐
相关产品推荐

