用途:指导 .NET 应用通过 Microsoft.Data.SqlClient 驱动连接 Azure SQL Database,说明包引用、加密默认值、连接池行为与 Microsoft Entra 身份验证的配置。
主要能力与包:驱动为 Microsoft.Data.SqlClient,安装命令:dotnet add package Microsoft.Data.SqlClient。System.Data.SqlClient 为旧提供程序,不再新增功能。自 7.0 起 Entra 依赖移出核心包,需额外引用:dotnet add package Microsoft.Data.SqlClient.Extensions.Azure,安装后无需改代码,扩展自动注册。
加密默认:Encrypt 自 4.0 起默认 True(3.x 及更早为 False);TrustServerCertificate 默认 False,Encrypt=Strict 下被忽略并视为 false。遇到证书错误不应改为 TrustServerCertificate=True。
连接池:自动启用,切勿缓存 SqlConnection,应打开、使用、释放。连接字符串即池键,任意差异会产生独立连接池。Connect Timeout 默认 15 秒,Azure SQL Database 建议设为 30;Pooling 为 True,Max Pool Size 100,Min Pool Size 0。Connect Retry Count(1)与 Interval(10)仅重连空闲断开的连接,不重放失败查询。AccessTokenCallback 属于池键,应使用共享的静态回调。
Entra 身份验证:在连接字符串设置 Authentication。托管标识用于 Azure 托管工作负载(系统分配无需额外字段,用户分配在 User Id 填客户端 ID,3.0 起需 client id 而非 object id);Active Directory Default 用于开发机与 CI;服务主体用于注册应用。Active Directory Password 在 7.0 已弃用。
检查方法:用 dotnet list package --include-transitive 核对依赖图;用 SqlAuthenticationProvider.GetProvider 确认提供程序是否存在;查询 sys.dm_exec_connections 校验加密与登录身份(需 VIEW DATABASE STATE 权限)。
限制:本地容器无法复现 Entra 提供程序缺失异常;加密策略、重试与池容量参见 connect-to-azure-sql,EF Core 参见 ef-core-azure-sql。不要硬编码密码、令牌、主机名或身份 ID。