You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 08:07:20