ASP.NET项目集成本地数据库遇连接错误求助
问题:ASP.NET项目集成LocalDB数据库连接失败
我正在完成大学作业,需要将数据库直接集成到ASP.NET项目中,导出后能在其他电脑无修改运行。当前项目目录结构如下:
WebApplication1 | Connected Services | Dependencies | Properties | wwwroot | Data | | dataBaseHelper.cs | | MyDb.mdf | Pages | appsettings.json | Program.cs
第一次尝试的配置与错误
在appsetting.Development.json中配置的连接字符串:
"DefaultConnection": "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Data\\MyDb.mdf;Integrated Security=True;Connect Timeout=30"
注:原配置未转义反斜杠,是导致错误的核心原因之一
运行时报错:
An unhandled exception occurred while processing the request.
ArgumentException: Invalid value for key 'attachdbfilename'.
System.Data.SqlClient.SqlConnectionString..ctor(string connectionString)
我的DatabaseHelper类获取连接字符串的代码:
public DatabaseHelper(IConfiguration configuration) { _connectionString = configuration.GetConnectionString("DefaultConnection"); }
第二次尝试的配置与错误
改用以下连接字符串:
"DefaultConnection": "Data Source=(LocalDB)\\MSSQLLocalDB;Initial Catalog=MyDb;Integrated Security=True;Connect Timeout=30"
出现新错误:
SqlException: Cannot open database "MyDb" requested by the login. The login failed.
Login failed for user 'DESKTOP-H14KUIC\nicol'
解决方案
1. 修复AttachDbFilename连接字符串错误(推荐,适配跨电脑运行)
JSON格式中反斜杠需要双重转义,同时要手动映射|DataDirectory|路径,确保程序能找到数据库文件:
- 修正
appsetting.Development.json中的连接字符串:
(注:因为会把"DefaultConnection": "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\MyDb.mdf;Integrated Security=True;Connect Timeout=30"|DataDirectory|直接指向项目的Data文件夹,所以路径里无需再加\Data\) - 在
Program.cs中添加|DataDirectory|的路径映射:var builder = WebApplication.CreateBuilder(args); // 添加这两行代码 var dataDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Data"); AppDomain.CurrentDomain.SetData("DataDirectory", dataDirectory); // 原有代码保持不变 var app = builder.Build(); - 右键项目中的
Data/MyDb.mdf文件,选择属性,设置复制到输出目录为如果较新则复制,确保数据库文件随项目运行或发布时被复制到正确位置。
2. 解决Initial Catalog方式的登录与数据库不存在问题(仅适合本地测试)
如果坚持用Initial Catalog方式,需要先将数据库附加到LocalDB实例,但这种方式无法实现跨电脑无修改运行:
- 打开SQL Server对象资源管理器,找到
(LocalDB)\MSSQLLocalDB实例 - 右键数据库→附加,浏览到项目
Data文件夹中的MyDb.mdf完成附加 - 右键附加后的数据库→属性→权限,添加当前用户并赋予
db_owner权限
内容的提问来源于stack exchange,提问作者naxtronix mortivus
相关产品推荐
相关产品推荐

