connectionStrings节点必须是configuration的直接子节点,name值需与代码中完全一致且区分大小写,providerName不可遗漏,.NET Core/5+应使用appsettings.json而非Web.config,密码严禁明文存储。

connectionStrings 节点必须放在 直接子级
很多人把 <connectionStrings> 塞进 <system.web> 或 <appSettings> 里,结果 ConfigurationManager.ConnectionStrings 根本读不到——它只认 <configuration> 的一级子节点。
正确位置示例:
<configuration>
<connectionStrings>
<add name="DefaultConnection"
connectionString="Server=localhost;Database=mydb;Trusted_Connection=true;"
providerName="System.Data.SqlClient" />
</connectionStrings>
<startup>...</startup>
</configuration>
-
name值要和代码里ConfigurationManager.ConnectionStrings["xxx"]的字符串完全一致,区分大小写 -
providerName不能漏:SQL Server 用System.Data.SqlClient(.NET Framework)或Microsoft.Data.SqlClient(.NET Core/5+ 需额外 NuGet) - 如果项目是 .NET Core / .NET 5+,
Web.config已被appsettings.json取代,Web.config仅在 IIS 部署时起辅助作用,连接字符串实际应从IConfiguration读取
connectionString 值里别硬编码密码,尤其上线环境
明文写密码在 Web.config 是高危操作,IIS 默认会阻止外部访问该文件,但配置失误、备份泄露、源码误提交都可能让密码裸奔。
- 开发阶段可用 Windows 身份验证:
Trusted_Connection=true;或Integrated Security=SSPI; - 生产环境优先用 SQL Server 的「托管标识」或「Azure AD 认证」,避免密码字段
- 实在要用 SQL 账号,把密码抽到
<appSettings>并启用configSource外置,或使用 IIS 的「密钥管理器」加密connectionStrings节点(用aspnet_regiis -pe)
多个环境共用一份 Web.config?用 configSource 拆分更安全
直接在 Web.config 里写 if-else 切换连接字符串不现实,XML 不支持条件语法。常见错误是手动改来改去,一发布就连错库。
- 把连接字符串单独拆成
connections.config,内容只有<connectionStrings>...</connectionStrings> - 主
Web.config中写:<connectionStrings configSource="connections.config" /> - 不同环境部署时只替换
connections.config,主配置不动,CI/CD 也容易做差异化处理 - 注意:
configSource文件路径是相对于Web.config所在目录的,不能跨虚拟目录,也不能用~/或绝对路径
ProviderName 写错会导致 TypeInitializationException 或“未注册提供程序”
错误现象:应用启动时报 System.TypeInitializationException,内层是 System.ArgumentException: Unable to find the requested .Net Framework Data Provider。
- .NET Framework 项目用
System.Data.SqlClient(自带) - .NET Core / .NET 5+ 项目默认不带 SQL Client,必须装
Microsoft.Data.SqlClientNuGet 包,且providerName必须写成Microsoft.Data.SqlClient(旧写法System.Data.SqlClient会失败) - EF Core 6+ 默认用
Microsoft.Data.SqlClient,但如果你手写 ADO.NET,providerName 和引用包必须严格匹配 - Oracle、MySQL 等第三方数据库同理:providerName 必须和已安装的 DbProviderFactory 类型名一致,拼错一个字母就报错
new SqlConnection() 的时候。










