我使用.mdf
来连接database
和entityClient
。现在我想更改连接字符串,以便没有.mdf
文件。
以下connectionString
是否正确?
<connectionStrings>
<!--<add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQL2008;AttachDbFilename=|DataDirectory|\NData.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True"" 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="Data Source=.\SQL2008;Initial Catalog=NData;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
因为我总是得到错误:
底层提供程序在Open
上失败
答案 0 :(得分:204)
我遇到了这个错误并找到了一些解决方案:
查看连接字符串,它看起来有效。我发现this blog post,问题在于他们使用Integrated Security。如果您在IIS上运行,则IIS用户需要访问数据库。
如果您使用的是Entity Framework with Transactions,则Entity Framework会自动打开和关闭与每个数据库调用的连接。因此,在使用事务时,您尝试通过多个连接传播事务。这会升至MSDTC。
(See this reference for more information.)
将我的代码更改为以下代码修复它:
using (DatabaseEntities context = new DatabaseEntities())
{
context.Connection.Open();
// the rest
}
答案 1 :(得分:38)
context.Connection.Open()
没有帮助解决我的问题所以我尝试在DTC配置中启用“允许远程客户端”,不再出现错误。
在Windows 7中,您可以通过运行dcomcnfg,组件服务 - &gt;打开DTC配置。计算机 - &gt;我的电脑 - &gt;分布式事务协调器 - &gt;右键单击本地DTC - &gt;安全
答案 2 :(得分:26)
您应该看到 innerException 以查看投掷的内在原因 错误是。
在我的情况下,原始错误是:
无法打开物理文件&#34; D:\ Projects2 \ xCU \ xCU \ App_Data \ xCUData_log.ldf&#34;。操作系统错误5:&#34; 5(访问被拒绝。)&#34;。 尝试为文件D:\ Projects2 \ xCU \ xCU \ App_Data \ xCUData.mdf附加自动命名的数据库失败。存在具有相同名称的数据库,或者无法打开指定的文件,或者它位于UNC共享上。
通过向当前用户提供使用文件访问相关mdf
和ldf
文件的完全权限来解决问题。属性。
答案 3 :(得分:23)
我发现问题是我在其中一个变体中的连接字符串中有服务器路径:
SERVER\SQLEXPRESS
SERVER
我真的应该拥有:
.\SQLEXPRESS
出于某种原因,只要找不到SQL实例,我就会收到错误。
答案 4 :(得分:15)
这只是常见问题。即使我遇到过这个问题。在配置了Windows身份验证的开发计算机上,它运行得很完美:
<add name="ShoppingCartAdminEntities" connectionString="metadata=res://*/ShoppingCartAPIModel.csdl|res://*/ShoppingCartAPIModel.ssdl|res://*/ShoppingCartAPIModel.msl;provider=System.Data.SqlClient;provider connection string="data source=.\SQlExpress;initial catalog=ShoppingCartAdmin;Integrated Security=True;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
在IIS中使用相同的配置托管后,我收到此错误:
底层提供程序在Open
上失败
解决了在配置文件中更改connectionString
的问题:
<add name="MyEntities" connectionString="metadata=res://*/ShoppingCartAPIModel.csdl|res://*/ShoppingCartAPIModel.ssdl|res://*/ShoppingCartAPIModel.msl;provider=System.Data.SqlClient;provider connection string="data source=MACHINE_Name\SQlExpress;initial catalog=ShoppingCartAdmin;persist security info=True;user id=sa;password=notmyrealpassword;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
其他常见错误可能是:
答案 5 :(得分:10)
当您收到此异常时,请务必展开详细信息并查看内部异常详细信息,因为它将提供有关原因登录失败的详细信息。在我的例子中,连接字符串包含一个无法访问我的数据库的用户。
无论您使用集成安全性(已登录Windows用户的上下文)还是单个SQL帐户,请确保用户在您尝试访问的数据库的“安全”下具有适当的访问权限以防止此问题
答案 6 :(得分:6)
SQL Server Express Edition上的Windows Server 2003出现了类似问题。我只是将网络服务作为用户添加到数据库安全性中。
答案 7 :(得分:3)
如果还原数据库并且用户已存在具有不同架构的情况,也会发生这种情况,从而无法分配正确的权限。
要更正此次运行:
USE your_database
EXEC sp_change_users_login 'Auto_Fix', 'user', NULL, 'cf'
GO
EXEC sp_change_users_login 'update_one', 'user', 'user'
GO
答案 8 :(得分:3)
SQL Server Express服务未自动设置为tostart。
1)转到控制面板 2)管理工具 3)服务 4)通过单击将SQL Server Express设置为自动启动 5)右键单击并启动服务
我希望这会有所帮助。
答案 9 :(得分:2)
确保提供的连接字符串中的每个元素值都是正确的。在我的情况下,我得到了相同的错误,因为连接字符串中指定的目录(数据库名称)的名称不正确。
答案 10 :(得分:2)
我在这里发布了一个类似的问题,使用托管在Amazon RDS上的SQL 2012数据库。问题出在连接字符串中 - 我有“应用程序名称”和“App”属性。一旦我删除了它,它就有用了。
Entity Framework 5 and Amazon RDS - "The underlying provider failed on Open."
答案 11 :(得分:1)
在服务器计算机上为Windows Firewall(以及端口1433)定义新的SQL Server规则可以解决此错误(如果您的服务器名,用户登录名或密码在您的连接字符串中没有错误。 )。
答案 12 :(得分:1)
我通过重置IIS来解决这个问题,但仍然在连接字符串中使用Integrated Authentication
。
答案 13 :(得分:1)
由于连接状态,我遇到类似的异常问题,然后我意识到我的域服务类变量标记为静态(错误)。
我的猜测是,一旦将服务库加载到内存中,每个新调用最终都会使用相同的静态变量值(域服务实例),从而导致通过连接状态发生冲突。
我认为每个客户端调用都会产生一个新线程,因此访问同一域服务实例的多个线程等同于火车残骸。
答案 14 :(得分:1)
我对内部异常有类似的错误,如下所示:
操作对交易状态无效
我可以通过启用DTC安全设置来解决它。
转到DTC的属性,在“安全”选项卡下,查看以下内容
答案 15 :(得分:1)
如果您碰巧在ASP.NET Web应用程序上遇到此错误,除了提到的其他内容之外,请检查以下内容:
答案 16 :(得分:0)
添加此 集成安全性= True;
,它应该可以工作。 我将此添加到我的配置,它开始工作。
答案 17 :(得分:0)
我有同样的错误,当我更改我的connectionString时,我发现了这些错误 到新的数据源 我忘记更改新数据库的用户名和密码
答案 18 :(得分:0)
如果未指定SQL Server实例名称并且SQL主机安装了多个SQL实例,我也会发生此错误。以下是一些澄清的例子:
下面的连接字符串导致异常“基础提供程序在打开时失败”,在.NET WebForms应用程序中没有内部异常:
connectionString="metadata=res://*/Entities.csdl|res://*/Entities.ssdl|res://*/Entities.msl;provider=System.Data.SqlClient;provider connection string="Data Source=localhost;Initial Catalog=Entities;User ID=user;Password=password;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient"
以下连接字符串在.net WebForms应用程序中按预期执行,其中SQL环境具有多个实例。很少见,但我在开发箱上有几个不同的SQL实例,以适应不同的项目:
connectionString="metadata=res://*/Entities.csdl|res://*/Entities.ssdl|res://*/Entities.msl;provider=System.Data.SqlClient;provider connection string="Data Source=localhost\SQLSERVER2014;Initial Catalog=Entities;User ID=user;Password=password;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient"
答案 19 :(得分:0)
在我的情况下,服务器管理员已更改服务器地址,因此我不得不将连接字符串更改为新的服务器地址
答案 20 :(得分:0)
在我的情况下,我在上下文的构造函数中注册的连接字符串名称与我的web.config中的名称不匹配。复制和粘贴造成的简单错误:D
public DataContext()
: base(nameOrConnectionString: "ConnStringName")
{
Database.SetInitializer<DataContext>(null);
}
答案 21 :(得分:0)
我遇到了这个问题,因为此应用程序运行的应用程序池登录已经更改。
在IIS中:
点击您的网站并转到基本设置,找到应用程序池。
转到应用程序池。
点击您网站的应用程序池。
点击高级设置。
在“身份”中,输入帐户登录名和密码。
重新启动您的网站,然后重试。
答案 22 :(得分:0)
没有任何答案适合我
我认为我们中的一些人都犯了愚蠢的错误,有100种失败的方法......
我的问题是新项目,我在另一个项目中设置了所有配置,但调用者是一个Web Api项目,我必须在Web api项目中复制相同的连接字符串。
我认为这很疯狂,因为我甚至没有从web api中新建dbcontext或其他东西。
否则类库试图寻找名为
的数据库TokenApi.Core.CalContext
我的项目名为TokenApi.Core
,CalContext
是连接字符串的名称和文件名
答案 23 :(得分:0)
我只在我的web.config Connectionstring中包含了密码,这对我有用。
<add name="Test2016Entities" connectionString="metadata=res://*/Models.PersonDataContext.csdl|res://*/Models.PersonDataContext.ssdl|res://*/Models.PersonDataContext.msl;provider=System.Data.SqlClient;provider connection string="data source=KEDAR-PC;initial catalog=Test2016;user id=sa;password=mypc123;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
答案 24 :(得分:0)
我已经解决了这个问题。
第1步: 打开Internet信息服务管理器
第2步: 单击左侧导航树中的“应用程序池”。
第3步: 选择您的版本池。就我而言,我使用ASP .Net v4.0。如果您没有此版本,请选择DefaultAppPool。
第4步: 右键单击步骤3,然后选择高级设置。
第5步: 在属性窗口中选择Identity,然后单击按钮以更改值。
第6步: 在“内置帐户”组合框中选择“本地系统”,然后单击“确定”。 而已。现在运行您的应用程序一切都运作良好。
Codeproject Solution : the-underlying-provider-failed-on-open
答案 25 :(得分:0)
您好,如果您正在使用Context Class 您可以使用以下代码:
<ScrollView contentContainerStyle={{ flexGrow: 1 }}>
...
</ScrollView>
答案 26 :(得分:0)
我正在网上搜索这个问题。我在连接字符串中输入了错误的名称,请检查web.config中的连接字符串。我有name="AppTest"
,但应该是name="App"
。
在我的AppTestContext.cs文件中,我有:
public AppTestContext() : this("App") { }
错误的连接字符串:
<add connectionString="Data Source=127.0.0.1;Initial Catalog=AppTest;Integrated Security=SSPI;MultipleActiveResultSets=True" name="AppTest" providerName="System.Data.SqlClient" />
正确的连接字符串:
<add connectionString="Data Source=127.0.0.1;Initial Catalog=AppTest;Integrated Security=SSPI;MultipleActiveResultSets=True" name="App" providerName="System.Data.SqlClient" />
答案 27 :(得分:0)
在 IIS 中设置应用程序池标识作为服务帐户用户或管理员帐户或ant帐户,该帐户有权对该数据库执行操作。
答案 28 :(得分:0)
我前几天遇到了同样的问题,使用“Integrated Security = True;”在连接字符串中,您需要在“localsystem”下运行应用程序池标识当然不建议这样做,但是为了测试它可以完成这项工作。
这是您在IIS 7中更改身份的方法: http://www.iis.net/learn/manage/configuring-security/application-pool-identities
答案 29 :(得分:0)
我将数据库文件(.mdf / .ldf)复制到App_Data文件夹中以摆脱此异常。
答案 30 :(得分:0)
我遇到了类似的问题:在我的测试用例执行中,我总是遇到这个错误。我发现,我的“分布式事务服务”没有启动(运行:services.msc - &gt; start“分布式事务服务”(最好将其设置为自动启动))。在我这样做之后,它就像一个魅力......
答案 31 :(得分:0)
我的一个网站突然发生了这个错误。就我而言,事实证明SQL用户的密码已经过期!在SQL Server Management Studio中取消密码到期框就行了!
答案 32 :(得分:0)
对我来说,这只是一个简单的错误:
我使用Amazon EC2,我在连接字符串中使用了弹性IP地址,但是当我更改IP地址时,我忘了更新连接字符串。
答案 33 :(得分:0)
我也面临同样的问题。现在我通过从连接字符串中删除用户名和密码来完成它。
答案 34 :(得分:0)
我做的一个常见错误,因为我将应用程序从一台PC移动到另一台,而上述工作都没有,因为我忘了将连接字符串复制到App.Config和Web.Config!
答案 35 :(得分:0)
我遇到了同样的问题,但对我有用的是从连接字符串中删除它:
persist security info=True
答案 36 :(得分:-1)
@majidgeek的答案包含最有用的信息:检查InnerException属性。在我的例子中,InnerException有自己的InnerException,它指出了我的问题:Windows防火墙阻止了MSDTC。一旦我启用了分布式事务处理协调器的传入和传出规则,一切都很顺利。
答案 37 :(得分:-1)
您可以尝试替换元数据:
metadata=res:///conString.csdl|res:///conString.ssdl|res://*/conString.msl
为:
metadata=res://*/;
答案 38 :(得分:-2)
我刚删除Entity Framework 5并将其替换为LINQ to SQL。它更容易......而且没有更奇怪的例外处理。
实体框架5,浪费时间。
有时我们真的应该问自己,实体框架5是否值得为它所引入的所有麻烦而感到非常简单。