MSSQL错误'底层提供程序失败打开' [英] MSSQL Error 'The underlying provider failed on Open'
问题描述
我使用 .mdf
连接到数据库
和 entityClient
。现在我想更改连接字符串,以便不会有
.mdf
文件。
code> connectionString 正确?
< connectionStrings>
<! - < add name =conStringconnectionString =metadata = res://*/conString.csdl | res://*/conString.ssdl | res:// * / conString。 msl; provider = System.Data.SqlClient; provider connection string =& quot;数据源= .\SQL2008; AttachDbFilename = | DataDirectory | \NData.mdf;集成安全性= True;连接超时= 30;用户实例= True; MultipleActiveResultSets = True& quot; providerName =System.Data.EntityClient/> - >
< add name =conStringconnectionString =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& providerName =System.Data.EntityClient/>
< h2_lin>解决方案
我有这个错误,并找到了几个解决方案:
看看你的连接字符串,它看起来有效。我发现这篇博文,这里的问题是他们正在使用集成安全性 。如果您在IIS上运行,您的IIS用户需要访问数据库。
如果您使用实体框架 与事务,Entity Framework自动打开和关闭与每个数据库调用的连接。因此,当使用事务时,您正试图通过多个连接传播事务。这会升级到 MSDTC 。
( 有关详情,请参阅此参考。)
将我的代码修改为以下内容:
using(DatabaseEntities context = new DatabaseEntities )
{
context.Connection.Open();
//其余
}
I was using an .mdf
for connecting to a database
and entityClient
. Now I want to change the connection string so that there will be no .mdf
file.
Is the following connectionString
correct?
<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" />
Because I always get the error:
The underlying provider failed on Open
I had this error and found a few solutions:
Looking at your connection string, it looks valid. I found this blog post, the problem here is that they were using Integrated Security. If you are running on IIS, your IIS user needs access to the database.
If you are using Entity Framework with Transactions, Entity Framework automatically opens and closes a connection with each database call. So when using transactions, you are attempting to spread a transaction out over multiple connections. This elevates to MSDTC.
(See this reference for more information.)
Changing my code to the following fixed it:
using (DatabaseEntities context = new DatabaseEntities())
{
context.Connection.Open();
// the rest
}
这篇关于MSSQL错误'底层提供程序失败打开'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!