MSSQL错误'基础提供程序在Open上失败'

sen*_*ale 213 c# sql-server entity-framework database-connection

我正在使用一个.mdf连接到databaseentityClient.现在我想更改连接字符串,以便没有.mdf文件.

以下connectionString是否正确?

<connectionStrings>
   <!--<add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQL2008;AttachDbFilename=|DataDirectory|\NData.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />-->
   <add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQL2008;Initial Catalog=NData;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)

因为我总是得到错误:

底层提供程序在Open上失败

Chr*_*yne 208

我有这个错误,并找到了一些解决方案:

查看连接字符串,它看起来有效.我发现这篇博文,这里的问题是他们使用的是集成安全性.如果您在IIS上运行,则IIS用户需要访问该数据库.

如果您正在使用实体框架 与交易,实体框架自动打开和关闭与每个数据库调用的连接.因此,在使用事务时,您尝试通过多个连接传播事务.这提升到MSDTC.

(有关详细信息,请参阅此参考.)

将我的代码更改为以下修复它:

using (DatabaseEntities context = new DatabaseEntities())
{
    context.Connection.Open();
    // the rest
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您正在使用EF/DBContext,那么正确的调用是context.Database.Connection.Open(); (61认同)
  • 使用Linq访问表(使用EF4)时如何完成? (6认同)
  • 我希望我在第一次找到它时就读过你的帖子而不是浏览它的代码。我的问题(如本答案中所指出的)是 CRM 2011 插件上下文的 AppPool 用户对我设置的数据库没有写访问权限。当我将用户添加到 SQL 时,该插件就像一个魅力。 (3认同)
  • @Brett Rigby:http://stackoverflow.com/questions/794707/why-doesnt-transactionscope-work-with-entity-framework/794785#794785 介绍了如何使用 Linq/EF 执行此操作。 (2认同)
  • 我的配置中没有以我创建的上下文命名的连接字符串.......也请检查。 (2认同)

ker*_*rem 38

context.Connection.Open() 没有帮助解决我的问题所以我尝试在DTC配置中启用"允许远程客户端",没有更多的错误.

在Windows 7中,您可以通过运行dcomcnfg,组件服务 - >计算机 - >我的电脑 - >分布式事务处理协调器 - >右键单击本地DTC - >安全性来打开DTC配置.

  • 在Windows 7中,您可以通过运行**dcomcnfg**,组件服务 - >计算机 - >我的电脑 - >分布式事务处理协调器 - >右键单击本地DTC - >安全性来打开DTC配置. (11认同)
  • 实际上它是右键单击本地DTC - >属性 - >安全性 (7认同)

Maj*_*jid 27

您应该看到innerException以查看抛出错误的内在原因是什么.

在我的情况下,原始错误是:

无法打开物理文件"D:\ Projects2\xCU\xCU\App_Data\xCUData_log.ldf".操作系统错误5:"5(访问被拒绝.)".尝试为文件D:\ Projects2\xCU\xCU\App_Data\xCUData.mdf附加自动命名的数据库失败.存在具有相同名称的数据库,或者无法打开指定的文件,或者它位于UNC共享上.

通过向当前用户提供使用文件属性访问相关文件mdfldf文件的完全权限来解决此问题.


doo*_*urt 24

我发现问题是我在其中一个变体中的连接字符串中有服务器路径:

SERVER\SQLEXPRESS
SERVER
Run Code Online (Sandbox Code Playgroud)

我真的应该拥有:

.\SQLEXPRESS
Run Code Online (Sandbox Code Playgroud)

出于某种原因,只要找不到SQL实例,我就会收到错误.

  • 这可能是因为您没有启用命名管道作为SQL Server的连接方法. (6认同)

Jai*_*arN 15

这只是常见问题.即使我遇到过这个问题.在配置了Windows身份验证的开发计算机上,它完美地运行:

<add name="ShoppingCartAdminEntities" connectionString="metadata=res://*/ShoppingCartAPIModel.csdl|res://*/ShoppingCartAPIModel.ssdl|res://*/ShoppingCartAPIModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQlExpress;initial catalog=ShoppingCartAdmin;Integrated Security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)

一旦在具有相同配置的IIS中托管,我就会收到此错误:

底层提供程序在Open上失败

解决connectionString了在配置文件中更改的问题:

<add name="MyEntities" connectionString="metadata=res://*/ShoppingCartAPIModel.csdl|res://*/ShoppingCartAPIModel.ssdl|res://*/ShoppingCartAPIModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MACHINE_Name\SQlExpress;initial catalog=ShoppingCartAdmin;persist security info=True;user id=sa;password=notmyrealpassword;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)

其他常见错误可能是:

  1. 数据库服务可以停止
  2. 数据源属性指向具有Windows身份验证并在IIS中托管的本地数据库
  3. 用户名和密码可能有误.


atc*_*way 10

当您收到此异常时,请确保展开详细信息并查看内部异常详细信息,因为它将提供有关登录失败原因的详细信息.在我的情况下,连接字符串包含一个无权访问我的数据库的用户.

无论您使用集成安全性(登录的Windows用户的上下文)还是单个SQL帐户,请确保用户在您尝试访问的数据库的"安全"下具有适当的访问权限,以防止出现此问题.


Par*_*ar6 6

我在Windows Server 2003上遇到过与SQL Server Express Edition类似的问题.我只是将网络服务作为用户添加到数据库安全性中.

  • 你能描述一下你是怎么做到的吗? (4认同)

小智 5

SQL Server Express 服务未设置为自动启动。

1) 转到控制面板 2) 管理工具 3) 服务 4) 通过单击将 SQL Server express 设置为自动启动 5) 右键单击​​并启动该服务

我希望这会有所帮助。