簡體   English   中英

無法連接到SQL Server 2016 LocalDB

[英]Unable to connect to SQL Server 2016 LocalDB

我已經設置了本地Sql Server並正在運行。 我還可以連接到它並在Visual Studio中運行查詢。 但是,當我向使用此數據庫的.net核心API發出POSTMAN請求時(數據庫和api都在同一台計算機的本地主機上),我收到錯誤消息:

Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware:執行請求時發生未處理的異常。

System.Data.SqlClient.SqlException(0x80131904):建立與SQL Server的連接時發生與網絡相關或特定於實例的錯誤。 服務器未找到或無法訪問。 驗證實例名稱正確,並且已將SQL Server配置為允許遠程連接。 (提供者:SQL網絡接口,錯誤:50-發生本地數據庫運行時錯誤。指定的LocalDB實例名稱無效。

但是,如果我嘗試sqlcmd -s "(localdb)\\MSSQLLocalDB" ,它可以工作並且可以連接。

以下是有關設置的更多信息:

命令sqllocaldb i MSSQLLocalDB

Name:               mssqllocaldb
Version:            13.1.4001.0
Shared name:
Owner:              MyDomain\My.User
Auto-create:        Yes
State:              Running
Last start time:    9/3/2018 xx:xx:xx xx
Instance pipe name: np:\\.\pipe\LOCALDB#2690D11D\tsql\query

連接字符串:

{
  "ConnectionStrings": {
    "ModelA": "server=(localdb)\\MSSQLLocalDB;Initial Catalog=ModelA.Test.DB;Trusted_Connection=True;",
    "ModelB": "server=(localdb)\\MSSQLLocalDB;Initial Catalog=ModelB.Test.DB;Trusted_Connection=True;"
  }
}

StartUp.cs Config服務:

services.AddDbContext<ModelAContext>(options => options.UseSqlServer(this.Configuration.GetConnectionString("ModelA")));
services.AddDbContext<ModelBContext>(options => options.UseSqlServer(this.Configuration.GetConnectionString("ModelB"), b => b.MigrationsAssembly("Migrations.Project")));

確保您的appsettings.json是唯一具有ConnectionStrings部分作為appsettings.Development.json配置。 為了進行測試,我會嘗試對其進行硬編碼,您也可以嘗試使用其他連接字符串格式,例如:

services.AddDbContext<ModelAContext>(options => options.UseSqlServer("Server=(localdb)\\MSSQLLocalDB;Integrated Security=True;Database=ModelA.Test.DB"));

編輯:如果您希望能夠使用基於環境的連接字符串,則應該始終在appsettings.jsonappsettings.Development.json始終只有開發連接字符串,這樣您的生產憑據不會通過源代碼控制泄漏。 您可以通過在類似以下環境下命名來簡化它

"ConnectionStrings": {
    "Development": <--your connection string for localhost development-->
},

現在,如果要為遠程數據庫添加生產連接字符串,請在Visual Studio>管理用戶秘密中 ,右鍵單擊ASP.NET Core網站項目 這將在%APPDATA%\\Microsoft\\UserSecrets\\生成並打開secrets.json文件。 在其中插入“生產”連接字符串。

{
    "ConnectionStrings": {
        "Production": <!--your connection string for remote server-->
    }
}

然后,您可以通過環境變量加載正確的連接字符串。

configuration.GetConnectionString(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"))

現在,如果要臨時將上下文切換到生產數據庫,則可以打開“程序包管理器控制台”並鍵入:

$Env:ASPNETCORE_ENVIRONMENT = "Production"

現在只剩下在遠程服務器上設置連接字符串了,因為secrets.json不會發布,並且連接字符串很可能在遠程服務器上有所不同。 使用環境變量ConnectionStrings__Production再次完成此操作:

Environment="ASPNETCORE_ENVIRONMENT=Production" "ConnectionStrings__Production=<--your connection string from remote server to a database-->"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM