如何解决错误“命名管道提供程序,错误40-无法打开与'SQL Server'的连接”?


152

我似乎无法从站点连接到我的数据库。我收到此错误:

命名管道提供程序,错误:40-无法打开与SQL Server的连接

我尝试使用本地IP地址以及公共IP地址进行连接。我试过了:

  1. 是的,站点可以与服务器通信
  2. 已启用命名管道/ TCP。
  3. 允许远程连接。
  4. Windows防火墙已关闭
  5. 在Windows防火墙中为端口1433创建了一个例外。
  6. 在SQL Server配置管理器中启用了所有功能。

我还能在这里做什么?


2
可能值得检查一下SQL Server是否实际使用端口1433。它可能使用的不是默认端口。
Rajeev Shenoy 2012年

ping时,还请确保正确设置了服务器名称(或写得很好)。这就是我的问题!
亚恩·查伯特

@RajeevShenoy:没有连接怎么知道(这是问题所在)?我可以使用netstat告诉连接时的端口,但这仅在存在连接的情况下有效。
MSIS

Answers:


117

解决这个问题非常容易:

  1. 转到控制面板。
  2. 寻找服务。
  3. 从搜索结果中打开“本地服务”窗口
  4. 重新启动您的MSSQLSERVER服务。

步骤的屏幕截图:

步骤的屏幕截图


1
哇,即使设置为自动,管理工作室也无法启动我的服务谢谢
johnny

谢谢,这对您有所帮助。我是否每次都要从这里开始启动服务?我以前不必。
naz786

3
如果此服务不在这里怎么办?我已经安装了SQL Server 17.我没有看到这个服务....
夏兰加拉格尔

1
进行170GB数据库备份时,服务已停止。因此,仅需5分钟即可重新启动重要客户端正在使用的sql服务器。非常感谢你。
Shondeslitch

2
所有动作均已检查,但重新启动对我不起作用。仍然出现相同的错误。
JayPex19年

89

而最简单的解决方案-检查斜线是否又回来了...

我花了大约一个小时的时间来弄清楚当正确配置所有内容,命名管道,用户访问权限后,SERVER / INSTANCENAME出了什么问题。突然间,它震惊了我,这不是一个斜杠,而是一个反斜杠\)。

恐怖,可耻...


2
我遇到了OP的问题,结果发现我缺少SERVER / INSTANCENAME信息(那里是一个点)。
LuxDie

@LuxDie您将SERVER \ INSTANCENAME放在哪里以及它在哪里?
tom_mai78101

这是关键,不要忘了您必须连接到托管在服务器上的“数据库”。如果仅将服务器的主机名用于连接,并尝试将实例名用作数据库,反之亦然,则会引发此错误。
MichaelHuelsen

解决了我的问题。工作连接字符串:Server=MyServerName\DOLPHIN=Trusted_Connection=True;Database=DolphinPlatform在开发(C#)时,我正在连接到本地安装的MSSQL 2017服务器,但是当我部署它时,由软件供应商安装的远程服务器正在以方式运行Instance。我一直认为这是身份验证问题,因为它一直作为服务运行,直到发现为止。
艾伦

49

安装SQL Server之后,这实际上是一个三步过程:

  1. 启用命名管道SQL Config Manager-> SQL Server网络Consif->协议->命名管道->右键单击->重新启动

启用命名管道

  1. 重新启动服务器SQL Config Manager-> SQL Server服务-> SQL Server(SQLEXPRESS)->右键单击->重新启动

  2. 使用正确的服务器和实例名称(都需要!)通常是。\ SQLEXPRESS,例如,请参见QueryExpress连接对话框中的屏幕快照。

在此处输入图片说明

你有它。


因为您的得分较高,答案相对较晚。这是什么,当您有可以与sql server正常通信的服务,然后在运行3个小时后,它就会开始出现此错误,并持续10分钟左右。然后,服务继续像错误之前一样运行。???
TS

这是用于本地连接吗?通过网络进行的远程连接正常工作还需要什么?
基辅(Kissaki)

19

我刚刚安装了SQL SERVER 2012开发人员。当我创建我的第一个SSIS包时,当我尝试在“连接管理器”框中的SQL Server 2012数据工具中创建数据连接任务时,收到此管道错误。我在上面的帖子的帮助下解决了。

如果选择一个命名实例,然后调用命名实例SSQDatabase1,并且您的计算机的名称为PCX1。您不仅必须输入SSQDatabase1,还必须输入PCX1 \ SSQDatabase1,否则您将收到命名管道错误。


16

MSDN Social上的一个线程,有关Re:Named Pipes Provider,错误:40-无法打开与SQL Server的连接,列出了与您的错误有关的可能问题。您可能想要查看其中是否有您遇到的问题。

  • 连接字符串不正确,例如使用SqlExpress
  • 在SQL实例上未启用命名管道(NP)
  • 远程连接未启用
  • 服务器未启动,或在连接字符串中指向非真实服务器
  • 其他原因,例如不正确的安全上下文
  • 在您正在使用的两台计算机之间尝试基本的连接测试

不幸的是,经过他们,这没有帮助。:(
Damien 2012年

4
好吧,找出这个。原来,当我安装服务器时,我做了一个命名实例。您不能以与默认实例相同的方式连接到命名实例。因此,数据源:有效实例的localhost \实例名称。仍然无法通过IP地址进行操作,但很高兴最终连接。
Damien 2012年

很高兴听到,但是出于好奇,您可以使用来连接它ip.ip.ip.ip/NamedInstance吗?
2012年


7

使用SERVER \\ INSTANCE NAME 。在项目中使用双反斜杠解决了我的问题。


这个也对我有用,但是谁能告诉我为什么这样做呢?
GWR

我会说字符串转义,但是取决于上下文
mizuki nakeshu

如果该字符串在C#代码中,@"server\instance"或者"server\\instance"应该起作用。如果在配置文件中,则只需要纯文本服务器\实例。
丹妮丝·斯基莫

7

多亏达米安...

TCP / IP命名管道...均已启用

Web配置....(对于localhost)

<add name="FooData" connectionString="Data Source=localhost\InstanceName;Initial Catalog=DatabaseName;Integrated Security=True;" providerName="System.Data.SqlClient" />

5

确实有同样的问题。当不得不迁移一些服务器时,花费了大约6个小时。尝试了有关该主题和其他主题的所有建议。

解决方案就像重启服务器一样简单!


1
可悲的是,重置服务器也为我解决了这个问题。上面提到的所有其他建议都无济于事。
MrShmee

3

在我的情况下,我有一台独立服务器,我将配置管理器中的sql server端口默认端口1433更改为某个数字,然后重新启动了sql serve服务生效,如果我登录,便能够通过Management Studio连接到sql server到服务器。但是我无法通过sql server从本地计算机连接,但出现错误:

建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称正确,并

SQL Server配置为允许远程连接。(提供者:命名管道提供程序,错误:40-无法打开与SQL Server的连接)(Microsoft SQL Server,错误:5)

我检查并验证了以下所有内容

-启用命名管道/ TCP。-允许远程连接。-Windows防火墙已关闭-为Windows防火墙中的端口创建了一个例外(在我的情况下这是没有必要的,因为服务器位于同一子网中)。-在SQL Server配置管理器中启用所有功能。

然后我将端口号改回默认值1433,然后重新启动sql server服务,问题得到解决,我能够从本地管理工作室连接sql server。


3

我有同样的问题。我使用MSSQL Server Management Studio 2017并使用以下步骤解决了此问题:

  1. 检查是否可以正常使用SQL Server Services服务。
  2. 另外,还要检查SQL Server(MSSQLSERVER)是否处于良好状态。
  3. 另外,请检查SQL Server Browser是否正常运行。
  4. 重新启动SQL Server(MSSQLSERVER)

并修复它。


3
谢谢你!SQL Server浏览器已禁用,因此为我修复了该问题!
山姆

2

请尝试以下步骤:

  1. 打开服务窗口(打开“运行框”,然后键入services.msc)。

  2. 寻找SQL服务(带有SQL前缀)。

  3. 启动它们(如果无法启动,请转到步骤4)。

  4. 右键单击每个服务->属性->更改为选项卡“登录”->选择以“本地...”登录-> 0K。然后再次启动SQL服务。

尝试打开SQL并连接数据库。


2

您会发现您的数据库名称很可能不正确,您将在VS中看到服务器名称,例如“ DESKTOP-0I14BKI”,但是如果打开SSMS,则会看到DESKTOP-0I14BKI \ SQLBLAHBLAH,只需添加“ \ SQLBLAHBLAH ”(实例名称) )添加到VS连接属性中的“服务器名称”。

您会看到在此处输入图片说明

修理: 在此处输入图片说明


2

TL; DR; 您的SQL Server实例正在使用不起作用的动态端口。强制SQL Server使用静态端口#1433。

完整详细信息:首先,如果您混合使用默认实例和命名实例或仅使用命名实例(这是我的情况),则更可能出现此问题。

关键概念:安装在计算机上的每个Microsoft SQL Server实例都使用不同的端口来侦听传入的连接请求。SQL Server的默认实例使用端口号1433。在安装命名实例时,它们将开始使用动态端口,动态端口是在启动与命名SQL Server实例对应的Windows服务时决定的。

我的代码无法(错误代码为40)连接到我在VM上拥有的唯一命名的SQL Server实例。您可以尝试以下可能的解决方案:

解决方案1:尝试连接到SQL Server实例的客户端代码从SQL Server浏览器服务获得帮助,以找出您的命名实例正在侦听传入连接的端口号。确保您的计算机上正在运行SQL浏览器服务。

解决方案2:从SQL Server配置管理器中检查您命名的SQL Server实例正在使用的端口号(黄色),如下面的快照所示:

在此处输入图片说明

在您的连接字符串中显式使用该端口号,或sqlcmd如下所示:

sqlcmd -s mymachinename,11380 -i deleteDB.sql -o SQLDelete.txt

解决方案3:强制命名实例使用默认实例使用的端口1433。请记住,仅当您的计算机上没有任何默认SQL Server实例时,此方法才有效,因为默认SQL Server实例将已经使用端口#1433。两个不同的Windows服务不能使用相同的端口号。

TCP Dynamic ports字段标记为空白,并将TCP Port字段标记为1433。

在此处输入图片说明

更改连接字符串中的端口号,如下所示:

sqlcmd -s mymachinename\instanceName -i deleteDB.sql -o SQLDelete.txt

要么

sqlcmd -s mymachinename,1433 -i deleteDB.sql -o SQLDelete.txt

注意:TCP / IP设置中的每项更改都需要重新启动Windows服务。

有趣的是,解决错误后,当我回到动态端口设置以重现相同的错误时,则没有发生。不知道为什么。

请阅读以下有趣的线程,以了解有关SQL Server动态端口的更多信息:

如何在多个实例上配置SQL Server端口?

动态端口什么时候“动态”?

何时使用TCP动态端口以及何时使用TCP端口?

我从这个博客中找到了解决问题的方法。


1

就我而言,我打开了SQL Server Management Studio,并在数据库引擎中搜索了SQLEXPRESS。它有两个实例,我选择了正确的一个。

在此处输入图片说明


1

如果您正在使用Asp.net core并使用appsettings.json,则将服务器写入为localhost,然后为启用的命名管道编写sql实例名称,如下所示

  "ConnectionString": {
    "dewDB": "server=localhost\\dewelopersql;database=dewdb;User ID=sa;password=XXXXX",
  },

1

非常简单的解决方案

使用(local)\InstanceName 就是这样。它为我工作。


1

如果您尝试重新启动MSSQLSERVER服务,但该服务无效,则可能是一种解决方案:

如果使用的是SQLExpress,则服务器名称应为以下ComputerName \ SQLExpress。但是,对于SQLDeveloper,您不必在ComputerName之后再使用SQLDeveloper。


0

执行完此处提到的所有步骤之后,如果仍然无法连接,请尝试在etc文件夹的hosts文件中添加具有IP地址的DNS。在连接字符串中添加IP地址而不是DNS名称应该是检查连接是否实际可行的临时解决方案。


0

我尝试使用本地IP地址以及公共IP地址进行连接。我试过了:

是的,站点可以与服务器通信命名管道/ TCP已启用。允许远程连接。Windows防火墙已关闭在Windows防火墙中为端口1433创建了例外。在SQL Server配置管理器中启用了所有功能。

我保证并做了上述事情,我只想分享一下DOUBLE BACKSLASH

oBuilder.DataSource =“ SPECIFICPCNAME \ SQLEXPRESS”;

使用单反斜杠会导致生成错误,即:错误1无法识别的转义序列

我希望这对下一个家伙有帮助-我牺牲了晚餐,午夜小吃,NBA强调了解决这个问题的时间(感到羞耻)

感谢[Tamizh venthan] ^ _ ^


0

通过转到“计算机管理”->“ SQL和服务”,启用“ TCP / Ip”,“管道协议”,确保服务已打开。禁用防火墙上的端口。尝试通过命令提示符->以管理员身份登录;最后,用户名应为(local)\ SQLEXPRESS。希望这可以帮助。


0

打开SQL Server配置管理器

  1. 从右侧选择“ SQL Server服务”。
  2. 从右侧找到您的服务器,然后转到其属性(单击鼠标右键)
  3. 将登录方法更改为本地系统。

在此处输入图片说明

在此处输入图片说明


0

我遇到了同样的问题,并通过禁用防火墙(ESET)解决了该问题。

解决此问题的第一步应该是尝试从另一台计算机ping您自己的计算机。如果您有防火墙,则可能无法ping通自己。我尝试ping自己的电脑,但ping失败(没有从服务器获得响应)


0

我已建议以下步骤解决您的问题如何解决错误“命名管道提供程序,错误40-无法打开与'SQL Server ' 的连接

  1. 检查是否可以正常使用SQL Server Services服务
  2. 还要检查SQL Server(MSSQLSERVER)是否工作良好。
  3. 另外,请检查SQL Server Browser是否正常运行。
  4. 删除所有以前的别名,现在根据您的要求创建新的别名。
  5. 现在检查SQL Server默认端口1433是否正常工作
  6. 接下来,在实例中单击“客户端协议”,然后单击“ TCP / IP”,然后单击鼠标右键,打开“属性”,在此可以确保默认端口SQL 1433的工作正常 。
  7. 打开您的SQL Server Management Studio,然后右键单击,单击“ 属性 ”选项,然后单击“ 连接 ”选项卡,最后在“ 允许远程连接到此服务器”上打勾。
  8. 检查是否正常工作或您的Ping IP主机

0

我试图在VS2015中添加新连接。这里的建议都没有奏效。怀疑向导中存在某种错误,特别是由于SSMS能够很好地连接,我决定尝试对其进行欺骗。有效!

  1. 代替添加连接,使用“创建新的SQL Server数据库”。输入服务器名称和新数据库的随机名称,例如“ test”。

  2. 假设此操作成功,请在VS中打开Server Explorer,在Data Connections中找到连接,右键单击它,然后选择Modify Connection。

  3. 将“测试”(从步骤1)更改为要连接到的现有数据库的名称。点击“测试连接”。这次应该可以了!

  4. 删除您在步骤1中创建的临时数据库。


0

我想我还有一个解决方案。在尝试了上述所有方法后仍无法连接后,我最近更改了计算机名称。我更改了服务器名称。.服务器名称=>(更多信息请浏览)=>在数据库引擎下,发现了一个与服务器新名称相同的新服务器。这行得通,生活再次美好。


0

在意识到错误之前,我为此苦苦挣扎了很长时间-我在连接字符串中使用逗号而不是分号。


0

我遇到了这个问题,但以上建议均未解决。

我将网站部署到IIS时看到了此问题。解决方法是针对默认应用程序池进入高级设置,并将身份属性从默认更改为管理员。


0

对我来说,这是一个防火墙问题。

首先,您必须添加端口(例如1444,也许是1434),但是

C:\Program Files (x86)\Microsoft SQL Server\90\Shared\sqlbrowser.exe

%ProgramFiles%\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\Binn\SQLAGENT.EXE

第二次遇到此问题是当我回到防火墙时,路径不正确,我需要将表格12更新为13!只需单击“程序和服务”选项卡中的浏览即可帮助实现这一点。

最后,尝试运行命令

EXEC xp_readerrorlog 0,1,“无法注册服务主体名称”,为空

对我来说,它返回了错误原因


0

我在此页面上尝试了几乎所有内容,但是我遇到了一些实际需要解决的潜在问题。我无法执行某些操作,例如打开SQL Server Configuration Manager,最终导致损坏/丢失WMI提供程序文件。

根据我所读的内容,有很多乏味的方法可以解决此问题,但是tweaking.com的工具能够删除和替换/修复我的WMI(Windows管理规范)提供程序文件。

我曾经做过电脑维修,而总体上tweaking.com工具确实给我留下了深刻的印象,这是我去过的WMI错误论坛页面之一所建议的。

解决此问题后,我能够在本地和远程连接到我的SQL数据库。

希望这对某人有帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.