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

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个回答

338

我发现以下技术很有帮助:

  1. 确保你的数据库引擎配置接受远程连接:

    • 开始 > 所有程序 > SQL Server 2005 > 配置工具 > SQL Server 表面区域配置
    • 单击服务和连接的表面区域配置
    • 选择出现问题的实例 > 数据库引擎 > 远程连接
    • 启用本地和远程连接
    • 重新启动实例
  2. 您可能需要为使用的SQL Server实例和端口在防火墙上创建一个例外:

    • 开始 > 运行 > Firewall.cpl
    • 单击“例外”选项卡
    • 添加sqlservr.exe(通常位于 C:\Program Files (x86)\Microsoft SQL Server\MSSQL.x\MSSQL\Bin,请检查实际文件夹路径)和端口(默认是 1433
    • 同时检查连接字符串
  3. 检查您的SQL服务器服务是否正常运行:

    • 前往所有程序 > Microsoft SQL Server 2008 > 配置工具 > SQL Server配置管理器 > SQL Server服务
    • 检查SQL Server服务状态是否正在运行。

    此外,请确保您的远程服务器在同一网络中。运行sqlcmd -L以确定您的服务器是否包含在您的网络列表中。

  • 启用 TCP/IP 在 SQL Server 配置中

    当两个或更多的 SQL Server 通过网络连接时,它们使用 TCP/IP 进行所有通信。SQL Server 安装的默认端口是 1433。可以通过 SQL Server 配置管理器更改此端口。必须启用 TCP/IP 才能连接到 SQL Server。

    • 转到所有程序 >> Microsoft SQL Server 2008 >> 配置工具 >> SQL Server 配置管理器 >> 选择 TCP/IP
    • 右键单击 TCP/IP >> 点击启用

    必须重启 SQL Server 服务才能使所有更改生效。右键单击并进入菜单属性,以选择可更改 SQL Server 默认端口的位置。


  • 14
    在使用SQL Server 2014 Express时,为我解决问题的方法是在SQL Server配置中启用TCP/IP。 - Mike Richards
    120
    今天我花了很多时间做这件事,最终对我起作用的是:打开 SQL Server 配置管理器 --> <INSTANCE> 的协议 --> TCP/IP --> IP 地址选项卡。转到最后一个条目 "IP All" 并输入 "TCP 端口 1433"。现在使用 "services.msc" 重新启动 SQL Server (<INSTANCE>)。之后,问题就得到了解决! - ani627
    1
    我在本地的Sql服务器上也遇到了这个问题,通过检查操作系统的本地服务并搜索特定的Sql服务,逐个启动它们来解决了这个问题。这样做非常完美。 - Faisal Naseer
    4
    我也遇到了同样的问题,登录到 SQL Server 发现 MSSQLServer 服务已停止,启动它后,现在可以连接到该实例。 - Rak
    21
    请记得启用SQL Server Browser服务。我曾经在我的工作中配置过多个SQL服务器......然而,这一步似乎总是涉及不同的情况 :) - mschr
    显示剩余11条评论

    179

    我找到了解决方案:

    打开“SQL Server配置管理器”

    点击“SQL Server网络配置”,再点击“Name的协议”

    右键单击“TCP/IP”(确保启用),然后点击“属性”

    现在选择“IP地址”选项卡 - 并转到最后一个条目“IP全部”

    输入“TCP端口”1433。

    现在使用“services.msc”(winKey + r)重新启动“SQL Server .Name.”

    它会起作用......


    4
    在 SQL Server 2014 中,使用 (localdb)\mssqllocaldb 替代 (localdb)\v11.0。 - Shalva Avanashvili
    120
    你把我在2015年2月24日发布的评论(比你的回答早7个月)复制粘贴成你的答案,但没有注明出处! :P - ani627
    2
    这个方法可行。我之前无法连接到 SQL Server 2016,但是做了这些更改后就成功了!谢谢。 - Ankur
    2
    它对我有效。在配置管理器中启用TCP/IP和命名管道后,只需在“service.msc”中启动服务即可。 - Alif Noushad
    1
    就像魔法一样!我正在使用SQL Server 2017,但仍然有效。 - danielpr
    显示剩余5条评论

    177

    将我受欢迎的评论添加为带有屏幕截图的答案。

    我花了很多时间研究,最终对我有效的是:

    1. 打开Sql Server Configuration Manager-->SQL Server Network configuration--><(INSTANCE)>协议--> TCP/IP(双击它)。

    enter image description here

    1. 选择 --> IP 地址(Tab)

    2. 跳到最后一项 IP 全部 并提到 TCP 端口 1433

    enter image description here

    1. 按下 Win+R 并输入 services.msc

    2. 现在重新启动 SQL Server <(INSTANCE)>

    enter image description here

    之后,问题得到了解决!


    无法连接到远程 SQL 服务器。 - ani627
    对我有用,SQL Express 2012。 - lost_in_magento
    1
    在启用TCP、将端口号1433添加到TCP ALL并重新启动服务后,这对我在SQL Server 2012中起作用了! - Chirag Khatsuriya
    对我来说,我还需要在防火墙中允许TCP 1433 UDP 1434。 - MarkusEgle
    2
    是的,设置端口号1433就可以了,似乎默认情况下它是空的。 - WtFudgE
    打开 Sql Server 配置管理器 --> SQL Server 网络配置 --> <(INSTANCE)> 的协议 --> TCP/IP(双击它)。这对我有用。 - raviook

    103

    我正在解决这个问题,方法是打开服务,启动Sql Server(Sqlexpress)服务。

    服务图片


    3
    我看到过SQL Server的Windows服务被设置为手动启动类型,因此在重新启动后它没有重新启动。应该将其设置为自动启动。 - robertburke
    2
    这正是我所做的,我的状态是运行中,启动类型是自动的,但仍然遇到了问题,所以我使用了从“运行”窗口键入services.msc的服务,然后右键单击 SQL Server(SQL EXPRESS)以获取上下文菜单,只需停止和重新启动服务,对我来说很好用,希望有所帮助。 - Shaiju T

    31

    当SQL服务停止时,会出现此错误。您需要重新启动该服务。要进入此窗口,您需要搜索以下服务:

    输入图像描述

    然后搜索SQLSERVER(MSSQLSERVER)并重新启动服务。

    输入图像描述

    希望这样可以解决问题。


    20

    如果您使用的是 Express 版本:

    您需要在服务器名称后添加 \SQLEXPRESS

    例如:MY-SERVER\SQLEXPRESS

    输入图像说明


    1
    我曾经遇到一个问题,我使用的是 \ 而不是 \ 。由于某种原因,我的一个应用程序可以正常工作,而另一个却不能。尽管第二个应用程序是第一个应用程序的简化版本。 - Maxim Yarmolik

    17

    按下window + R (运行窗口),在运行窗口中输入"services.msc"打开新服务,找到名为SQL SERVER的实例(在我的情况下是SQL SERVER(SQLEXPRESS)),然后启动此服务,再试一次即可。希望对您有用。输入图像描述


    2
    答案已经提供过了,请不要没有理由再次发布。 - Anik Saha
    10
    朋友,我遇到了同样的问题,但我不知道如何打开服务窗口,后来我找到了一种方法,想和大家分享。 - Muhammad Asad
    现在,另一个人 @Debendra 从你的回答中 复制,并且获得了比你更多的票数。 - Dush
    我能说什么呢。 - Muhammad Asad

    17

    当我想在另一台电脑上运行我的WinForms项目(其中包括与SQL Server数据库的交互,在我的个人电脑上完美运作)时,我遇到了相同的错误。问题出现在我的个人电脑的Windows防火墙中。我通过添加两个规则来解决此问题。以下是如何允许SQL Server通过Windows防火墙的完整过程:

    1. 打开“运行”并输入services.msc
    2. 找到SQL Server服务(实例名称)和SQL Server Browser服务。依次右键单击,选择“属性”,复制exe文件的路径
    3. 然后打开firewall.cpl,单击“允许应用程序或添加规则”,添加先前复制的路径(需要遵循一定的步骤),勾选域和私有,不选公共。

    这是YouTube链接,您可以在其中查看此过程:允许SQL Server通过Windows防火墙


    对我来说完美运行。重要提示:在防火墙中添加浏览器和服务器!+1 - BendEg
    我一直在苦苦寻找sqlservr.exe文件,这个方法帮我成功找到了它。 - Stan

    16

    我遇到了相同的问题。

    在我的情况下,我通过如下步骤解决了这个问题:

    第1步:从开始菜单进入SQL Server配置管理器

    第2步:启用TCP/IP

    enter image description here

    第3步:双击TCP/IP,点击IP地址中的最后一项IP ALL,输入TCP端口1433,然后应用更改

    enter image description here

    第4步:按win+r键,输入services.msc打开服务。然后向下滚动并右键单击SQL Server(MSSQLSERVER),选择重启

    enter image description here

    这样就解决了我的问题。即使执行以上所有步骤仍无法解决问题,则只需重新启动电脑,希望它能正常工作。


    这与@ani627在4年前的2016年7月28日回答的答案相同,只是被点赞了一下,因为它只是复制了别人的回答。 - Dush
    我一年多前遇到了同样的问题,并以这种方式解决了它,因此我分享了这个方法。 - Mahmud

    14

    这个解决方案解决了两个问题网络错误和在 SQL 服务器后面的服务

    我在这里回答了一个类似的问题,你需要启动其他打开运行-输入 services.msc-在服务下->按已停止排序,你会看到一堆已停止的 SQL 服务右键单击并启动

    开始之前 - 有4个问题可能导致常见的 LocalDb SqlExpress Sql Server 连接错误SQL Network Interfaces, error: 50 - Local Database Runtime error occurred,在开始之前,您需要将 v11 或 v12 重命名为 (localdb)\mssqllocaldb


    Troubleshooting Steps
    
    1. 您没有运行服务,请运行此命令net start MSSQLSERVERnet start MSSQL$ instancename
    2. 您没有正确设置防火墙端口,请参见这里enter image description here
    3. 您的安装存在问题/损坏(下面的步骤将帮助您开始一个干净的新开端)
    4. 您没有将V11或12重命名为mssqllocaldb/SqlServer,请参见这里

    我发现最简单的方法就是按下面的步骤操作 - 我已经附上了图片和说明以帮助您。


    Resolution Steps:
    

    首先确认您安装了哪个实例,可通过检查注册表运行cmd来完成。

    1. cmd> Sqllocaldb.exe i
    2. cmd> Sqllocaldb.exe s "whicheverVersionYouWantFromListBefore" 如果此步骤失败,可以使用选项 d 删除 cmd> Sqllocaldb.exe d "someDb"
    3. cmd> Sqllocaldb.exe c "createSomeNewDbIfyouWantDb"
    4. cmd> Sqllocaldb.exe start "createSomeNewDbIfyouWantDb"

    重新启动 MSSql Server 或者直接重启您的电脑!

    • 按住/按下打开 CMD,window + R 并输入 "services.msc"

    • 现在查找 SQL Server 服务,找到带有实例名称的 SQL SERVER
      然后 重新启动 此服务并重试。

    SqlLOCALDb_edited.png


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