2010-05-16 88 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中托管服务时才会出现此问题

相关问题