ASP.NET Core 6 MVC连接SQL Server失败,ConnectionString未初始化
解决ASP.NET Core 6 MVC连接SQL Server时ConnectionString未初始化的问题
核心问题定位
报错System.InvalidOperationException: The ConnectionString property has not been initialized说明你执行Dapper的QueryFirstOrDefault时,使用的SqlConnection对象未正确赋值连接字符串。
分步排查与修复
1. 确认appsettings.json的连接字符串配置
确保连接字符串格式正确、键名无拼写错误:
{ "ConnectionStrings": { "DefaultConnection": "Server=你的服务器地址;Database=你的数据库名;Trusted_Connection=True;TrustServerCertificate=True;" // 若使用SQL账号验证:"Server=.;Database=xxx;User Id=sa;Password=xxx;TrustServerCertificate=True;" } }
2. 检查Program.cs的服务注册
若使用Entity Framework Core(DbContext)
确保正确注册DbContext并传入连接字符串:
var builder = WebApplication.CreateBuilder(args); // 注册DbContext builder.Services.AddDbContext<AppDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"))); // 注册你的Repository(依赖注入用) builder.Services.AddScoped<UsersRepository>(); var app = builder.Build(); // ...其他中间件配置
若直接使用Dapper(无DbContext)
确保Repository能通过依赖注入获取配置:
// Program.cs中注册Repository builder.Services.AddScoped<UsersRepository>();
3. 修正UsersRepository的代码
确保创建SqlConnection时传入正确的连接字符串:
public class UsersRepository { private readonly string _connectionString; // 通过构造函数注入IConfiguration获取连接字符串 public UsersRepository(IConfiguration configuration) { _connectionString = configuration.GetConnectionString("DefaultConnection") ?? throw new ArgumentNullException("未找到配置的ConnectionString"); } public tbUsers GetUser(/* 你的参数 */) { string SqlQuery = "你的存储过程名"; var parameters = new DynamicParameters(); // 给参数赋值... // 必须传入连接字符串创建SqlConnection using var db = new SqlConnection(_connectionString); var result = db.QueryFirstOrDefault<tbUsers>(SqlQuery, parameters, commandType: CommandType.StoredProcedure); return result; } }
4. 避免手动实例化DbContext/Repository
不要在代码里直接new AppDbContext()或new UsersRepository(),必须通过依赖注入获取实例,比如在Controller中:
public class UsersController : Controller { private readonly UsersRepository _repo; public UsersController(UsersRepository repo) { _repo = repo; } // 动作方法中调用_repo的方法 }
常见坑点
- 连接字符串键名拼写错误(比如把
DefaultConnection写成DefualtConnection) - Repository构造函数未注入
IConfiguration,无法获取连接字符串 - 创建
SqlConnection时忘记传入连接字符串(直接new SqlConnection()) - 未在Program.cs中注册Repository/DbContext,导致依赖注入失败
内容的提问来源于stack exchange,提问作者nickramen
相关产品推荐
相关产品推荐

