LocalDB 在 ASP.NET 程序中找不到數據庫

LocalDB 在 ASP.NET 程序中找不到數據庫:有時候錯誤信息是:沒法找到數據庫,請確認數據庫名稱是否正確;而有時候會變成:Cannot open database  requested by the login. The login failed.sql

其實第一個錯誤信息有時候是身份驗證的問題致使的,若是真是數據庫名稱沒寫對,而苦苦地尋找解決方案,那就真的能夠去撞牆了。數據庫

我出現這個問題的狀況特別詭異,而這是我第一次接觸 SqlServer,對其不大瞭解,致使了我花了不少時間才解決了這個問題。服務器

首先,我在本機跑的時候是徹底沒問題的,但是當我部署到服務器上跑就出現了找不到數據庫的問題了。app

數據庫以及表我都是寫成控制檯程序,以可執行程序的形式跑的,程序跑得很順利,但是運行 ASP.NET 程序的時候卻出錯了。測試

因而我又寫了一個測試鏈接數據庫的控制檯程序,結果跑得也是很順利。這時候就納悶了,百度出了各類解決方案,再次吐槽:國內的不少文章都特麼是一字不落抄過去的,而 StackOverflow 也有不少解決方案,試了不少種方法,結果都是在幾個錯誤信息中來回變更。this

後來,我逐漸感受是身份驗證的緣由,因而到微軟官網查看了一下 SqlConnection.ConnectionString 的文檔,想要看看如何在鏈接字符串中添加用戶名密碼,這兩個參數沒找到,我卻先看到了「Initial Catalog- 或 -Database」參數,因而,我就把數據庫參數添加到鏈接字符串中。進程

(本來我是先鏈接到 LocalDB 實例,再調用 ChangeDatabase 方法切換數據庫的,因而每次在這個方法都報錯:找不到數據庫)文檔

很使人驚喜的是,此次的錯誤信息再也不是過去那幾個中的一個了:Cannot open database requested by the login. The login failed.字符串

很明確的,身份驗證的緣由。部署

百度一下,連接到 StackOverflow,看到了不少個熟悉的解決方案,並且解決率還很高,但對於我來講並無解決成功,並且也看到了相似的解決方案,吐槽:跟國內差很少,拿別人的解決方案,稍微換一下,又是原創解決方案了,呵呵噠。

對於個人問題,正確的解決方案是倒數第三個:

I had this problem and what solved it for me was to:

  • Go to the Application pools in the IIS
  • Right click on my project application pool
  • In Process Model section open Identity
  • Choose Custom account option
  • Enter your pc user name and password.

 就是到服務器中的 IIS 找到應用程序所在的應用程序池,點擊右邊的高級設置(他上面說是右鍵,額。。。不知道是哪一個版本的 IIS 是醬紫操做的,個人是 IIS7),而後設置「進程模型」的「標識」屬性,彈出對話框後選擇自定義帳戶,輸入你登陸服務器的帳號密碼,OK。

在這裏就不截圖了,不方便,233333

問題解決後,我忽然恍然大悟,爲何控制檯程序能跑得很順利,而 ASP.NET 程序卻報錯?由於控制檯程序不須要去設置程序的身份,默認使用登陸系統的帳戶,而 ASP.NET 是託管在 IIS 中的,有涉及到身份驗證,默認值爲 ApplicationPoolIdentify,不懂這是什麼,但是它致使了錯誤,就說明這個身份確定不行。

以上。

相關文章
相關標籤/搜索