无法连接到服务器 - 一个与网络或实例相关的错误

515

当我尝试连接到SQL Server时,出现以下错误:

在建立与SQL Server的连接时发生了与网络相关或特定实例的错误。无法找到服务器或服务器不可访问。请验证实例名称是否正确,并确认 SQL Server 已配置为允许远程连接。(提供程序:命名管道提供程序,错误: 40 - 无法打开到 SQL Server 的连接)

当我尝试在Visual Studio 2010中将我的数据库配置为网格视图时,就会出现此错误。我不知道如何调试这个错误。

您该如何调试这个错误?除了错误消息中提到的步骤外,我还应该采取哪些步骤来确定真正发生了什么?


14
用ping测试SQL Server连接不可靠,在Windows Server中默认禁用ICMP回显请求。无效的用户名或密码并不是错误提示的意思,那是完全不同的错误。 - Sean Airey
2
请尝试阅读这篇文章,它详细介绍了诊断连接问题所需的所有步骤:http://social.technet.microsoft.com/wiki/contents/articles/2102.how-to-troubleshoot-connecting-to-the-sql-server-database-engine.aspx - Sean Airey
4
如果您在首次设置SQL Server {version} Express时出现此错误,请参见我的回答及其截图。我再次回到StackOverflow并重新使用了我的回答,因为它是唯一有效的解决方法。https://dev59.com/IHM_5IYBdhLWcg3waSX9 - Entree
这个问题在Meta上进行了讨论。 - Joe
2
我也遇到过同样的错误。在我的情况下,我没有正确拼写服务器名称。有时候问题就出在这些简单的地方。 - Tarzan
显示剩余10条评论
57个回答

10
如果以上解决方案都不起作用(对我没有用),那么只需重新启动电脑,您就可以连接到您的SQL服务器(本地主机)。

这将起作用的原因是,您刚刚安装了Sql Server,并且没有像安装程序告诉您的那样重新启动计算机。因此,请重新启动计算机,然后服务将被创建并补充所有必要的配置。 - Sterling Diaz
2
为什么这里的每个人都假定它是一个本地数据库??? - Hobbamok

10
我正在使用SQL Server 2016和Windows 10。

enter image description here

首先需要允许远程连接到SQL Server。 我做的是在开始菜单中键入sqlservermanager13.msc以打开SQL Server配置管理器。确保TCP/IP状态已启用。 enter image description here

通过双击TCP/IP协议名称来检查您的TCP端口号。通常默认为1433。

enter image description here

以下步骤使用带有高级安全性的 Windows 防火墙 Microsoft Management Console (MMC) 快捷方式配置 Windows 防火墙。高级安全性的 Windows 防火墙仅配置当前配置文件。
要在 Windows 防火墙中打开 TCP 访问端口,请执行以下操作:
  1. 在“开始”菜单上,单击“运行”,键入“WF.msc”,然后单击“确定”。
  2. 在带有高级安全性的 Windows 防火墙中,在左窗格中右键单击“入站规则”,然后在操作窗格中单击“新建规则”。
  3. 在“规则类型”对话框中,选择“端口”,然后单击“下一步”。
  4. 在“协议和端口”对话框中,选择 TCP。选择“特定本地端口”,然后键入数据库引擎实例的端口号,例如默认实例的 1433 端口。单击“下一步”。
  5. 在“操作”对话框中,选择“允许连接”,然后单击“下一步”。
  6. 在“配置文件”对话框中,选择描述计算机连接环境的任何配置文件,当您想要连接到数据库引擎时,然后单击“下一步”。
  7. 在“名称”对话框中,键入此规则的名称和描述,然后单击“完成”。
另一件需要配置的事情。

当使用动态端口时,打开访问SQL服务器的权限

  1. 在开始菜单中,点击运行,输入WF.msc,然后点击确定。
  2. 在带有高级安全性的Windows防火墙中,右键点击入站规则(Inbound Rules),然后在操作面板中选择新建规则(New Rule)。
  3. 在规则类型(Rule Type)对话框中,选择程序(Program),然后点击下一步(Next)。
  4. 在程序(Program)对话框中,选择该程序路径(This program path)。点击浏览(Browse),并导航到您想要通过防火墙访问的SQL Server实例,然后点击打开(Open)。默认情况下,SQL Server位于C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\Sqlservr.exe。点击下一步(Next)。
  5. 在操作(Action)对话框中,选择允许连接(Allow the connection),然后点击下一步(Next)。
  6. 在配置文件(Profile)对话框中,选择描述计算机连接环境的任何配置文件,以便在需要连接到数据库引擎时进行连接,然后点击下一步(Next)。
  7. 在名称(Name)对话框中,输入此规则的名称和描述,然后点击完成(Finish)。
请查看微软文档 配置 Windows 防火墙以访问数据库引擎

在我的PC Windows 10上,SQL Server实例位于C:\ Program Files \ Microsoft SQL Server \ MSSQL13.SQLEXPRESS \ MSSQL \ Binn \ Sqlservr.exe。 - Mayer Spitz
有很多方法可以阻止访问SQL Server。SQL Browser 可以解决这个问题,但关闭它并检查上面列出的内容可以将问题缩小到登录权限、防火墙中的TCP端口访问(假定允许远程连接)。远程连接是默认的,因此两个主要问题是端口访问(如192.168.1.2,60122),其中实例的端口是60122,以及防火墙规则。谢谢Fred。 - Jamie

9
在完成了这里提到的所有步骤之后:
http://blog.sqlauthority.com/2009/05/21/sql-server-fix-error-provider-named-pipes-provider-error-40-could-not-open-a-connection-to-sql-server-microsoft-sql-server-error/ 对我来说仍然不起作用。
以下是适合我的步骤: 开始 > 运行 > cmd > sqlcmd -L 它会提示您服务器名称。确保此服务器名称与您在SQL管理工具中尝试连接的服务器名称相同。
我犯了一个愚蠢的错误,我一直在使用 MSSQLSERVER,而没有使用这个服务器名称。
希望这可以帮助像我这样犯傻错误的人。
谢谢。

8
您可以尝试以下方法。
a 1. 检查项目的连接字符串。
b 1. 进入服务并重启SQLServer Instance。
c 1. 打开“SQLServer Configuration Manager”。 2. 在左侧面板中选择“SQLServer Network Configuration”并进行扩展。 3. 选择“MSSQLServer的协议”。 4. 在右侧面板中双击“TCP/IP”。 5. 在“协议”选项卡中将“Enabled”设置为“Yes”。 6. 在“IP Addresses”选项卡中向下滚动。 7. 在“IPAll”中将“TCP Port”设置为1433。
d 1. 打开“高级安全防火墙”。 2. 在右侧选项卡中选择“入站规则”。
在中间选项卡中找到“本地端口”为1433的记录。如果找不到,请按以下步骤创建它。
1. 在开始菜单中,单击运行,键入“WF.msc”,然后单击“确定”。 2. 在左侧面板中单击“高级安全防火墙”。 3. 在右侧面板中右键单击“入站规则”,然后单击“新建规则”。 4. 在“规则类型”对话框中,选择“端口”,然后单击“下一步”。 5. 在“协议和端口”对话框中,选择“TCP”,选择“指定本地端口”,然后输入端口号1433,单击“下一步”。 6. 在“操作”对话框中,选择允许连接,然后单击“下一步”。 7. 在“配置文件”对话框中,勾选域、私有和公共,然后单击“下一步”。 8. 在“名称”对话框中,键入“SQL 1433 Port”,并编写自己的描述。然后单击“完成”。
然后在中间选项卡中双击找到的项目(Instance)或由您命名为“SQL 1433 Port”的创建项目。
1. 选择打开的对话框(SQL Server Properties)中的“范围”选项卡。 2. 在本地计算机上,在浏览器中打开google.com并搜索“My IP”。 3. 然后复制您的“IP”。 4. 转到远程服务器,并在“Scope”选项卡的“SQL Server Properties”对话框中,在“Remote IP Address”中选择“这些IP地址”选项,然后单击“添加”按钮。 5. 在打开的对话框(IP Address)中选择“此IP地址或子网”选项,然后粘贴您的“IP”,单击“确定”按钮。

6
我需要在 SQL Server Configuration Manager 中运行SQL Server Browser 服务。如果没有这个服务,安装程序就无法发现新创建的服务。

1
我还没有到达目标,但我正在接近。在Visual Studio中完成此操作后,还需要断开并重新连接,仍然会出现相同的错误,但现在至少可以从VS2015后面创建表格,并且我创建的数据库似乎现在可以运行了。(即它们上面没有出现黑色的十字图标) - Peter
2
请注意,在本地计算机上执行此命令会导致服务器名称出现在“开始”>“运行”>“cmd”>“sqlcmd -L”中。 - Peter

6
我尝试了这个问题的所有其他答案,其中一些可能起到了作用,但我仍然无法远程连接到数据库。 我在Azure虚拟机上使用SQL Server。
最终我想起了虚拟机具有由Azure帐户代理控制的端点,因此我登录Azure门户并添加了1433作为可用端点,这样就可以连接到我的SQL实例了。
希望能对那些尝试过所有其他答案但仍然没有运气的人有所帮助!

5

我曾经遇到过同样的问题,问题出在我的解决方案中有几个项目(WebDroid),尽管在Package Manager Console中选择了Default project,但它使用了Droid项目中的连接字符串:

PM> update-database -Verbose
Using StartUp project 'Droid'. <-- DROID
Using NuGet project 'Web'. <-- WEB
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
<!-- BAD TARGET DATABASE -->
Target database is: 'DefaultConnection' (DataSource: .\SQLEXPRESS, Provider: System.Data.SqlClient, Origin: Convention).
System.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)
   [REMOVED TEXT]
ClientConnectionId:00000000-0000-0000-0000-000000000000
Error Number:-1,State:0,Class:20
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

Startup Project设置为Web,并在Package Manager Console中将Default Project设置为Web后,我成功地使其工作。


5

您可以检查MS SQL Server 2014的服务状态。在Windows 7中,您可以执行以下操作:

  1. 进入搜索框并输入“SQL Server 2014配置管理器”
  2. 然后在左侧菜单中单击“SQL Server服务”
  3. 检查SQL Server服务实例的状态是否已停止或正在运行
  4. 如果已停止,请将其更改为运行状态并登录到SQL Server Management Studio 2014

5

只需重启 SQL Server (MSSQLSERVER) 服务即可。


有超过4个人给出了相同的答案,甚至有些人在你回答之前就已经带上了截图。 - Dush

4

我从Windows 7的工作笔记本电脑转移到了Windows 10的工作笔记本电脑。在Windows 7上,我成功地使用SSMS2016。

使用SSMS2012或SSMS2016时出现了相同的问题。我的使用Windows身份验证访问10个SQL服务器的权限仍然是一样的。我可以从另一台服务器上测试这一点。但是,我的笔记本电脑无法连接其中的两个服务器。这两个服务器都是ms SQL Server 9,但我可以连接到另一个SQL Server 9数据库。

解决方法是添加防火墙规则(使用高级安全的Windows防火墙)。

为每个SSMS创建一个传入规则,例如C:\Program Files (x86)\Microsoft SQL Server\130\Tools\Binn\ManagementStudio\Ssms.exe。

我不是网络专家,因此没有包括详细信息,但希望这能指引您正确的方向。


错误消息(防火墙规则前):"在建立与SQL Server的连接时发生了与网络相关或特定于实例的错误。找不到服务器或无法访问。请验证实例名称是否正确,并检查SQL Server是否配置为允许远程连接。(提供程序:SQL Network Interfaces,错误:26 - 找不到指定的服务器/实例)(.Net SqlClient Data Provider)"


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