2013-08-16 121 views
25

下面是我的連接字符串:實體框架的基礎提供失敗的開放

connectionString="metadata=res://*/EDMX.Test.csdl|res://*/EDMX.Test.ssdl|res://*/EDMX.Test.msl;provider=System.Data.SqlClient;provider connection string="Data Source=home_computer;Initial Catalog=db_Test;Persist Security Info=True;User ID=testUser;Password=$1234;MultipleActiveResultSets=True""

這裏就是程序卡代碼:

EDMX.TestingEntity context = new EDMX.TestingEntity(); 

var query = from t in context.User 
      where t.UserName == _userName 
      select t; 

運行上面的代碼後,我檢查變量查詢並發現了異常

The underlying provider failed on Open.

我檢查:

服務器和計算機之間
  1. 連接正常
  2. 我可以登錄到數據庫的用戶名testuser的,並以$ 1234
  3. 我已經在數據庫(SQL Server)檢查安全設置,權限已被授予爲testUser密碼

爲什麼會發生此異常?我使用.NET 4.5


補充:

我再次嘗試,看看內部異常,它是: 建立SQL連接時出現與網絡相關的或特定於實例的錯誤服務器。服務器未找到或無法訪問。驗證實例名稱是否正確,並將SQL Server配置爲允許遠程連接。 (提供程序:命名管道提供程序,錯誤:40 - 無法打開連接到SQL Server)

我知道這可能是一個網絡問題,但我已關閉服務器的防火牆,也是我的電腦,並再次嘗試,但仍然沒有成功..


剛纔複製ConnectionString,以一個程序來測試這方面,它運作良好..


我只是回滾所有更改並再次測試,它的工作

+2

檢查home_computer上的防火牆規則以允許SQL Server端口上的傳入連接(默認值爲1433)。 –

+3

任何'InnerException'? –

+0

請看我的編輯 – User2012384

回答

34

似乎是一個連接問題。您可以使用數據鏈接屬性來查找連接是否正常。請執行以下操作:

  1. 創建一個空白記事本並將其重命名爲「X.UDL」
  2. 雙擊打開它
  3. 在連接選項卡中選擇服務器名稱/輸入名稱 使用正確的憑據和DB
  4. 點擊確定保存即可。

現在打開文件在記事本和比較連接字符串屬性。

+0

感謝您的救命提示。 –

+0

你能解釋一下這個過程更多嗎?我不確定我會跟着做什麼。我在哪裏創建這個文件?我可以在Visual Studio中打開它嗎? –

3

請首先檢查以下事項。

在生成Edmx時,您應該爲連接字符串指定一個名稱。與實體進入項目的應用程序配置。

您是否將相同的連接字符串複製到主配置文件中? 此外,名稱應與您在生成EDMX文件時給出的名稱相同。

+0

我已經檢查了兩次,名稱在app.config中是一樣的,有沒有辦法在調試時檢查EDMX中的連接字符串? – User2012384

0

嘗試這個 - 打開命令提示符作爲管理員,並鍵入此 netsh的無線網絡nsock reset

重新啓動系統,然後重試。

+1

問題的原因可能與網絡有關,這是我的情況,這就是爲什麼我upvote這個答案。 – coloboxp

3

我的客戶報告了這個錯誤。我發現他正在搞亂* .ldf文件。他將* ldf文件複製到一個數據庫中,並將其重命名爲匹配第二個數據庫(我要求他將其放在一個文件夾中)。

我複製了同樣的情況,並在我的開發系統中得到了同樣的錯誤。刪除* ldf文件後錯誤得到修復。

0

如果您使用的是本地.mdf文件, 可能是一個同步軟件,Dropbox的嘗試在兩臺不同的計算機 你可以從bin目錄刪除日誌文件,並確保同步兩個日誌文件(.LDF) .mdf屬性 - >複製到輸出目錄 - >複製如果更新 將複製選定的數據庫文件,並將其日誌記錄到bin目錄。 !警報 - 如果您的數據庫文件只在bin目錄中更改,則所有更改都將被丟棄!

7
  1. 搜索「組件服務」,在程序和文件
  2. 轉到服務
  3. 找到「分佈式事務處理協調器」服務
  4. 右鍵單擊並重新啓動服務

你剛剛完成服務的重新啓動並且代碼應該正常運行

+0

這個簡單的解決方案爲我工作。 –

6

可能的解決方案在this Code Project tip

As folks mentioned IIS user network service user credentials while trying to log in sql server. So just change the Application pool settings in your IIS:

  1. Open Internet Information Service Manager
  2. Click on Application Pools in left navigation tree.
  3. Select your version Pool. In my case, I am using ASP .Net v4.0. If you dont have this version, select DefaultAppPool.
  4. Right click on step 3, and select advanced settings.
  5. Select Identity in properties window and click the button to change the value.
  6. Select Local System in Built-in accounts combo box and click ok. That's it. Now run your application. Everything works well.
4

我們有連接字符串中web.configData Source=localhost,並有此錯誤(MSSQL是在同一臺機器上)。將其更改爲實際的「DOMAIN \ MACHINE」有所幫助,這是爲什麼。

1

對我來說,當通常開始發生時,我必須遠程桌面進入服務,並在最低限度重新啓動IIS。它通常在我部署代碼後立即彈出。在極少數情況下,我不得不重新啓動SQL服務和IIS。我編寫了一個批處理腳本來接受一個參數(1或2),並讓它設置爲重新啓動IIS(即1),或進入全核(即2)。

3

總是檢查內部異常,如果有的話。在我的例子中,Inner Exception被證明對於解決這個問題非常有幫助。

我的網站在開發環境中工作正常。但是當我部署到生產環境後,它開始發出這個異常,但是Inner Exception是說特定用戶的登錄失敗。
所以我想通了,這是連接本身。因此嘗試使用SSMS登錄,甚至失敗。

最終發現,出現異常的原因很簡單,因爲SQL服務器只啓用了Windows身份驗證,而SQL身份驗證失敗,這是我用於身份驗證的原因。

簡而言之,將身份驗證更改爲混合(SQL和Windows),爲我解決了這個問題。 :)

0

我在開發機器上運行時經常遇到這個異常,特別是在我進行代碼更改,重建代碼,然後執行關聯的網頁之後。但是,如果我將CommandTimeout參數提升到120秒或更長時間(例如,在LINQ語句之前設置context.Database.CommandTimeout = 120),問題就會消失。雖然這是3年前最初提出的,但它可能有助於某人尋找答案。我的理論是VisualStudio需要時間將構建的二進制庫轉換爲機器代碼,並且在實時編譯之後嘗試連接到SQL Server時超時。

0

我有這個錯誤,它是由在App.config中的連接字符串中的錯字造成的。

0

打開SQL Server配置管理器,然後單擊上的SQL Server服務的列表將在列表中顯示右鍵單擊SQL Server,然後點擊開始

+0

雖然這可能是解決問題的有價值的提示,但一個很好的答案也可以證明解決方案。請[編輯](http://stackoverflow.com/posts/5419867/edit)提供示例代碼來展示你的意思。或者,可以考慮將其寫爲註釋 –

-2

ERROR : An exception of type 'System.Data.Entity.Core.EntityException' occurred in EntityFramework.SqlServer.dll but was not handled in user code Additional information: The underlying provider failed on Open.

SOLUTION:

  • 添加在型號:

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    [Key] 
    
  • 命名空間:

    using System.ComponentModel.DataAnnotations; 
    using System.ComponentModel.DataAnnotations.Schema; 
    
  • 例子:

    namespace MvcApplication1.Models 
    { 
        [Table("tblEmployee")] 
        public class Employee 
        { 
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
        [Key] 
        public int EmplyeeID { get; set; }   
        public string Name { get; set; } 
        public string Gender { get; set; } 
        public string City { get; set; }  
        } 
    } 
    
1

就我而言,我通過在連接字符串中添加連接密碼來解決的錯誤。

設置EF模型時,我選擇了從連接字符串中排除敏感數據的選項。所以,最初沒有包含密碼。

1

當一位同事試圖連接到一個受VPN保護的數據庫時,我看到了這個錯誤。用戶不知道切換到無法訪問VPN的無線網絡。測試這種情況的一種方法是查看是否可以用另一種方式(如SSMS)建立連接,並查看是否也失敗了。

相關問題