C#中ConnectionString配置引发空引用异常问题求助
问题描述
我认为我的ConnectionString配置存在问题。我的C#代码如下:
public List<Usuario> getUsuario() { List<Usuario> usuarios = new List<Usuario>(); string strConn = ConfigurationManager .ConnectionStrings["BDLocal"] .ConnectionString; using (SqlConnection conn = new SqlConnection(strConn))
web.config中的连接字符串配置如下:
<connectionStrings> <add name="BDLocal" connectionString="Data Source=DESKTOP-EJ\SQLEXPRESS;Initial Catalog=Crud.Data;Persist Security Info=True;User ID=user;Password=pass" providerName="System.Data.SqlClient" /> </connectionStrings>
访问api/usuario接口时,出现以下错误:
System.NullReferenceException: 'Object reference not set to an instance of an object.'
System.Configuration.ConnectionStringSettingsCollection.this[string].get returned null.
我知道自己肯定哪里操作有误,但找不到问题所在,请求帮助。
解决方案
1. 验证配置文件的有效性
- 确认
web.config位于项目根目录,且发布/运行时该文件被正确复制到输出目录。若使用IIS部署,检查站点对应的物理路径下是否存在正确的web.config。 - 核对连接字符串的
name属性值BDLocal与代码中引用的名称完全一致(虽然.NET默认不区分大小写,但完全匹配可避免潜在问题)。
2. 确认程序集引用
如果是.NET Framework项目,必须确保已添加System.Configuration相关引用:
- 右键项目 → 管理NuGet程序包 → 搜索并安装
System.Configuration.ConfigurationManager;或直接在项目引用中添加系统程序集System.Configuration。
3. 区分.NET版本的配置方式
如果项目基于.NET Core/.NET 5+,禁止使用ConfigurationManager,改用IConfiguration读取配置:
- 在
Program.cs(.NET 6+)中配置已自动加载,直接注入IConfiguration即可:var builder = WebApplication.CreateBuilder(args); // 配置已默认加载,可直接在服务/控制器中注入IConfiguration - 在控制器或服务中注入并读取连接字符串:
private readonly IConfiguration _configuration; public YourController(IConfiguration configuration) { _configuration = configuration; } public List<Usuario> getUsuario() { List<Usuario> usuarios = new List<Usuario>(); string strConn = _configuration.GetConnectionString("BDLocal"); using (SqlConnection conn = new SqlConnection(strConn)) { // 后续数据库操作代码 } } - .NET Core/.NET 5+项目的连接字符串需配置在
appsettings.json中:{ "ConnectionStrings": { "BDLocal": "Data Source=DESKTOP-EJ\\SQLEXPRESS;Initial Catalog=Crud.Data;Persist Security Info=True;User ID=user;Password=pass" } }
4. 检查连接字符串格式与权限
- 确认
Data Source中的服务器名DESKTOP-EJ\SQLEXPRESS正确,SQL Server实例处于运行状态。 - 验证
Initial Catalog指定的Crud.Data数据库存在,且配置的User ID和Password拥有该数据库的访问权限。 - XML配置中反斜杠无需转义,但JSON中需写成双反斜杠
\\。
5. 排查运行环境配置覆盖问题
- 若在IIS中部署,检查站点的“连接字符串”设置(IIS管理器 → 站点 → 连接字符串)是否覆盖了
web.config中的配置。 - 确保运行Web API的进程(如IIS应用池身份)拥有读取配置文件的权限。
内容的提问来源于stack exchange,提问作者baconitus
相关产品推荐
相关产品推荐

