实体框架:底层提供程序在打开时失败。

44

以下是我的连接字符串:

connectionString="metadata=res://*/EDMX.Test.csdl|res://*/EDMX.Test.ssdl|res://*/EDMX.Test.msl;provider=System.Data.SqlClient;provider connection string="Data Source=home_computer;Initial Catalog=db_Test;Persist Security Info=True;User ID=testUser;Password=$1234;MultipleActiveResultSets=True""

以下是程序停滞的代码:

EDMX.TestingEntity context = new EDMX.TestingEntity();

var query = from t in context.User
            where t.UserName == _userName
            select t;

运行以上代码后,我检查了变量query并发现了一个异常。
引起这个异常的原因是底层提供程序在打开时失败。
我已经检查过:
1. 服务器和计算机之间的连接是正常的 2. 我可以使用用户名testuser和密码$1234登录到数据库 3. 我已经检查了数据库(SQL Server)中的安全设置,已授予testUser权限
为什么会出现这种异常?我正在使用.net 4.5。
补充:
我尝试了一下,查看内部异常,发现是:
在建立与SQL Server的连接时发生了与网络相关或特定于实例的错误。找不到服务器或无法访问。请验证实例名称是否正确,并且SQL Server已配置为允许远程连接。(提供程序:命名管道提供程序,错误:40 - 无法打开到SQL Server的连接)
我知道这可能是一个网络问题,但我已经关闭了服务器和计算机的防火墙,再次尝试但仍然没有成功。
刚才我将连接字符串复制到一个程序中测试该连接,结果功能正常。
我刚刚回滚了所有更改并重新测试,结果成功了。

2
检查家用电脑的防火墙规则,允许 SQL Server 端口(默认为 1433)的传入连接。 - Adel Khayata
3
有内部异常吗? - Uwe Keim
@Adel Khayata 我已经关闭了防火墙并进行了测试,仍然没有成功。 - User2012384
3
回滚之后现在工作正常了吗?有什么原因导致的,有任何想法吗? - Ramesh Sivaraman
1
如何执行Adel Khayata建议的操作说明可以在此处找到:https://blogs.msdn.microsoft.com/walzenbach/2010/04/14/how-to-enable-remote-connections-in-sql-server-2008/。 - Dov Miller
显示剩余3条评论
22个回答

2

在我的开发机上运行时,我经常遇到这个异常,尤其是在我进行代码更改、重新构建代码,然后执行相关的网页时。但是,如果我将CommandTimeout参数增加到120秒或更长时间(例如,在LINQ语句之前设置context.Database.CommandTimeout = 120),问题就会消失。虽然这个问题最初是3年前提出的,但它可能对正在寻找答案的人有所帮助。我的理论是VisualStudio需要一些时间将构建的二进制库转换为机器代码,在进行即时编译后尝试连接到SQL Server时超时。


2

对于我来说,通常会在部署代码后开始出现这种情况。当这种情况发生时,我需要远程桌面连接到服务并最少重启IIS。在极少数情况下,我不得不重新启动SQL服务和IIS。我写了一个批处理脚本,可以接受一个参数(1或2),并设置为执行IIS的重启(即1),或进行全面重置(即2)。


1
核能!它的意思是核能! - nilsK

1
今天我遇到了同样的错误,我的问题在于我没有在连接字符串中添加Password标签。当我加上正确的密码后,错误就消失了。希望能帮助到其他人。

1
我遇到了同样的问题。虽然在我的情况下,我试图将我的桌面应用程序连接到远程数据库。所以对我来说,上面的所有方法都不起作用。我通过添加端口(如128.02.39.29:3315)来解决这个问题,它神奇地起作用了!之所以我一开始没有添加端口,是因为我在另一个桌面应用程序中使用了相同的方法(没有端口),它也起作用了。所以我希望这可以帮助其他人。

1

这个错误是由于我的SQL Server密码过期导致的,当我创建了一个新密码后,我的应用程序就能够完美登录了。


1
我遇到了这个错误,原因是App.config中的连接字符串中有一个打字错误。

1
这个解决方案适用于在部署Windows应用程序时遇到此问题的人,我知道现在有点晚了,但对于将来的某些人可能有用。在我的情况下,这纯粹是一个连接字符串问题。我使用实体框架(DB First方法)开发了一个Windows应用程序,并将其发布。代码在我的机器上运行良好,但在客户机上却无法正常工作。
造成这个问题的原因是:我更新了App.config文件中的客户端机器连接字符串,但这是错误的。如果是一个Windows应用程序,则它不会从App.config(对于已部署的机器)中读取连接字符串,而是从.exe.config文件中读取。因此,在部署后,我们需要在“应用程序名称”。exe.config文件中更改连接字符串。

0

打开SQL Server配置管理器,然后单击“SQL Server服务”,会列出一个列表,从列表中右键单击SQL Server并单击“启动”


虽然这可能是解决问题的有价值提示,但一个好的答案也应该展示解决方案。请编辑提供示例代码以展示您的意思。或者,考虑将其编写为评论。 - ρяσѕρєя K

0
尝试这个 - 以管理员身份打开命令提示符,然后键入以下内容 netsh Winsock reset

重新启动您的系统,然后再试一次。


1
问题的原因可能与网络有关,这正是我的情况,这就是为什么我点赞这个答案的原因。 - coloboxp

0
如果您正在使用本地的 .mdf 文件,可能会出现同步软件(如 Dropbox)尝试在两台不同的计算机上同步两个日志文件(.ldf)。您可以从 bin 目录中删除日志文件,并确保 .mdf 属性 -> 复制到输出目录 -> 如果更新则复制,这将把所选的 DB 文件及其日志复制到 bin 目录中。注意:如果您的 DB 文件仅在 bin 目录中更改,则所有更改都将被丢弃!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接