2010-05-16 96 views
16

當我嘗試插入記錄時,出現此錯誤:底層提供程序在打開時失敗。 此錯誤僅在IIS中出現,而不在VWD 2008的Web服務器中出現。 在EventViewer中,出現此應用程序錯誤:由於無法爲用戶實例啓動進程而無法生成SQL Server的用戶實例。連接將被關閉。 [客戶端:]實體框架:「底層提供程序在打開時失敗」

<add name="ASPNETDBEntities" 
    connectionString=" 
     metadata=res://*/Models.FriendList.csdl|res://*/Models.FriendList.ssdl|res://*/Models.FriendList.msl; 
     provider=System.Data.SqlClient; 
     provider connection string=&quot; 
     Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ASPNETDB.MDF; 
     Integrated Security=True; 
     Connect Timeout=30; 
     User Instance=True; 
     MultipleActiveResultSets=True&quot;" 
    providerName="System.Data.EntityClient" /> 

我使用ASPNETDB.MDF文件,而不是任何外部數據庫。 我已經搜索了足夠的這個,但沒有用。

一切工作正常VWD Web服務器

回答

9

您應該爲您的Web服務器訪問數據庫aspnetdb的創建SQL帳戶。它目前使用集成身份驗證(嘗試使用Web服務器用於運行應用程序的身份登錄)。

下面的示例使用集成身份驗證。我會使用SQL身份驗證。

http://msdn.microsoft.com/en-us/library/ff649314.aspx

+0

如何創建一個SQL帳戶?我沒有安裝Sqlserver 2008。我正在使用Sqlserver 2008 Express版本,它隨VWD 2008一起安裝。因此,沒有查詢分析器或企業管理器。 – pokrate 2010-05-22 05:27:02

+0

安裝Microsoft SQL Server Management Studio Express http://www.microsoft.com/downloads/details.aspx?familyid=08E52AC2-1D62-45F6-9A4A-4B76A8564A2B&displaylang=zh-CN – 2010-06-06 20:59:13

0

添加在你給的連接字符串下面的屬性。

<add 
    name="ASPNETDBEntities" 
    connectionString="metadata=res://*/Models.FriendList.csdl| 
         res://*Models.FriendList.ssdl|res://*/Models.FriendList.msl; 
         provider=System.Data.SqlClient;provider connection string=&quot; 
         Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ASPNETDB.MDF; 
         Integrated Security=True;Connect Timeout=30; 
         User Instance=True; 
         MultipleActiveResultSets=True&quot;" 
    ProviderName="System.Data.EntityClient" 
    User Instance="False"/> 
+0

假設您對「下面的屬性」非常模糊引用(哪一個你是指完全?)是'MultipleActiveResultSets = True',它不適合我 – Ortund 2013-02-22 22:19:57

0

也許回答已經太遲了,但我有同樣的問題。

我添加了作用域超時(5分鐘)。我舉個例子。

Dim varIntervalo As New TimeSpan(0, 5, 0) 
Using varTransaccion As New TransactionScope(TransactionScopeOption.Required, varIntervalo) 
    For vari As Integer = 2 To varMatrizDatos.GetUpperBound(0) 
     Dim varWhateverAs New TABLE 
     varWhatever.ID_TABLE = something 
     varWhatever.DESC_TABLE = something else 
     varWhatever.DATE_TABLE = CDate(Now.Date) 

     varEntidades.AddToTABLESet(varWhatever) 
     varEntidades.SaveChanges() 
    Next 
    varTransaccion.Complete() 
End Using 

也許這個代碼可以改進。

3

我得到了同樣的問題,做調試後,我看到了我對每一個動作創建數據庫實體的新實例,並進行dB實體的新實例指開擴與DB新的連接。

下面是代碼:

Private tmpConnection As New DbModel.DbEntities 

所以通過一次又一次地調用變量及其創建DbEntites的新實例,並打開一個到數據庫的新連接。

所以我寫了一個小功能,並解決了我的問題。現在沒有更多的錯誤。

Private tmpConnection As DbModel.DbEntities 

Public Function dbCon() As DbModel.DbEntities 

    If tmpConnection IsNot Nothing Then 

     If tmpConnection.Connection.State = ConnectionState.Closed Then 

      Try 
       tmpConnection.Connection.Open() 
       Return tmpConnection 
      Catch ex As Exception 
       My.Response.Redirect("dberror.aspx") 
      End Try 

     Else 

      Return tmpConnection 

     End If 

    Else 

     tmpConnection = New DbModel.DbEntities 

     Try 
      tmpConnection.Connection.Open() 
      Return tmpConnection 
     Catch ex As Exception 
      My.Response.Redirect("dberror.aspx") 
     End Try 

    End If 

    Return Nothing 
End Function 

和連接字符串中的最後一項請添加「Connect Timeout = 30;」

這就是我

2

工作如此完美的每一個動作使用DB實體的新實例,不應該建立物理連接到您的SQL服務器。實體框架將使用爲連接字符串中配置的(流程,應用程序域,連接字符串)創建的連接池,以避免創建新的連接。

這個問題是非常環保和調整參數(在康涅狄格州的字符串),如下面要解決的problem-

閔池大小= 1;

最大池大小= 100; //默認

連接超時= 15; //在幾秒鐘內

Pooling = true;

+0

這個答案對我來說。我將默認的「最大池大小」和「連接超時」參數值加倍。完整信息在這裏:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring(v=vs.110).aspx在此之前,雖然我改爲** SQL Server * *從** Windows **身份驗證,並確保'DTC'啓動並運行,並允許遠程客戶端沒有解決我的問題,但我認爲他們也是必要的。 – 2015-08-14 20:33:37

0

此外,該異常被拋出時,你要操作表被刪除或不存在

0

此異常時,似乎有什麼事,這可能會導致您的連接字符串無效拋出。無效的憑據是我的原因。

1

在我的情況下,我使用的是Sql CE,而我的連接字符串是使用絕對路徑設置的,而不是inf | DataDirectory |變量。改變了這一點,它開始在服務器上工作。

顯然,它在開發機器上運行良好。

0

我有一個類似的問題,我也使用IIS。我打開了一個命令窗口並輸入iisreset。問題解決了。

0

數據庫作爲Windows身份驗證添加到ServerExplorer中時,會出現此問題。在ServerExplorer中添加數據庫時使用sql身份驗證時,問題將得到解決。如果仍然使用Windows身份驗證並避免此異常,請在webconfig文件的連接字符串中提供數據庫的用戶標識和密碼。

只有當我們在IIS中託管服務時纔會出現此問題

相關問題