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

Posted

技术标签:

【中文标题】如何修复错误“命名管道提供程序,错误 40 - 无法打开与“SQL Server”的连接?【英文标题】:How do I fix the error 'Named Pipes Provider, error 40 - Could not open a connection to' SQL Server'? 【发布时间】:2012-04-14 06:46:34 【问题描述】:

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

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

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

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

我还能在这里做什么?

【问题讨论】:

检查 SQL Server 是否实际使用端口 1433 可能是值得的。它可能使用的不是默认端口。 还要确保在 ping 时正确设置服务器名称(或写得好)。这就是我的问题! @RajeevShenoy:如果没有连接,你怎么知道(这是问题所在)?我可以在连接时使用 netstat 告诉端口,但这仅在有连接时才有效。 相关帖子 - Why am I getting “Cannot Connect to Server - A network-related or instance-specific error”? 我忘了添加端口号 - 在调用服务器时(Rajeev 的评论略有不同),即调用需要包括:serverName、portNumber。这解决了“管道提供程序错误 40”的问题。 【参考方案1】:

MSDN Social 上的一个线程,Re: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server,列出了与您的错误相关的可能问题的相当不错的列表。您可能想看看其中是否有可能是您正在经历的。

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

【讨论】:

不幸的是,通过它们并没有帮助。 :( 好吧,想办法。事实证明,当我安装服务器时,我做了一个命名实例。您不能以与默认实例相同的方式连接到命名实例。因此,数据源:本地主机\有效实例的名称。仍然无法使用 IP 地址进行操作,但很高兴终于可以连接。 很高兴听到,但出于好奇,您可以使用ip.ip.ip.ip/NamedInstance 连接到它吗?【参考方案2】:

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

我花了大约一个小时试图弄清楚 SERVER/INSTANCENAME 在一切都正确配置、命名管道、用户访问权限时出了什么问题……突然让我震惊了,这不是斜线,这是一个反斜杠 (\)。

恐怖,耻辱......

【讨论】:

我遇到了 OP 的问题,结果发现我缺少 SERVER/INSTANCENAME 信息(那里有一个点)。 @LuxDie 你把 SERVER\INSTANCENAME 放在哪里?它在哪里? 这是关键,不要忘记您必须连接到托管在服务器实例中的“数据库”。如果您仅使用服务器的主机名进行连接并尝试将实例名用作数据库,则会引发此错误,反之亦然。 解决了我的问题。工作连接字符串:Server=MyServerName\DOLPHIN=Trusted_Connection=True;Database=DolphinPlatform 在开发 (C#) 时,我连接到本地安装的 MSSQL 2017 服务器,但当我去部署它时,软件供应商安装的远程服务器以 Instance 运行。我一直认为这是一个身份验证问题,因为在我发现它之前它是作为服务运行的。【参考方案3】:

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

【讨论】:

这个也对我有用,但谁能告诉我为什么会这样? 我会说字符串转义,但取决于上下文 如果该字符串在 C# 代码中,@"server\instance""server\\instance" 应该可以工作。如果它在配置文件中,那么您只需要纯文本服务器\实例。【参考方案4】:

非常简单的解决方案

使用(local)\InstanceName 而已。它对我有用。

【讨论】:

【参考方案5】:

感谢达米安...

TCP/IP 命名管道 ...都启用了

Web 配置....(用于本地主机)

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

【讨论】:

【参考方案6】:

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

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

【讨论】:

遗憾的是,重置服务器也为我解决了这个问题。提到的所有其他建议都已尝试无济于事。【参考方案7】:

按照here提到的所有步骤后,如果仍然无法连接,请尝试在etc文件夹的hosts文件中添加带有IP地址的DNS。在连接字符串中添加 IP 地址而不是 DNS 名称应该是检查连接是否确实有效的临时解决方案。

【讨论】:

【参考方案8】:

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

如果选择一个命名实例并且你调用你的命名实例 SSQDatabase1 并且你的电脑的名字是 PCX1。您必须输入 PCX1\SSQDatabase1 而不仅仅是 SSQDatabase1 否则您将收到命名管道错误。

【讨论】:

【参考方案9】:

尝试以下步骤:

    打开服务窗口(打开“运行框”并输入 services.msc)。

    正在寻找 SQL 服务(带有 SQL 前缀)。

    启动它们(如果无法启动。转到第 4 步)。

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

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

【讨论】:

【参考方案10】:

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

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

我也确保并做了上述事情,我只是想分享一下双反斜杠

oBuilder.DataSource = "SPECIFICPCNAME\SQLEXPRESS";

使用 SINGLE BACKSLASH 会导致构建错误,即:错误 1 ​​无法识别的转义序列

我希望这对下一个人有所帮助 - 我已经牺牲了晚餐、宵夜和 NBA 集锦时间来解决这个问题(耻辱)

感谢 [Tamizh venthan] ^_^

【讨论】:

【参考方案11】:

就我而言,我有一个独立服务器,我将配置管理器中的 sql server 端口默认端口 1433 更改为某个数字并重新启动 sql server 服务以生效,我能够通过 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。

【讨论】:

【参考方案12】:

通过计算机管理 -> SQL 和服务启用 TCP/Ip 管道协议,确保服务已开启。在防火墙上启用端口。尝试通过命令提示符-> 以管理员身份登录;最后一个用户名 应该是(本地)\SQLEXPRESS。希望这会有所帮助。

【讨论】:

【参考方案13】:

打开 SQL Server 配置管理器

    从右侧选择 SQL Server 服务。 从右侧找到您的服务器并转到其属性(右键单击) 将登录方法更改为本地系统。

【讨论】:

【参考方案14】:

我刚刚在 Sql Server 配置管理器中启用了 TCP/IP、VIA、命名管道,我的问题得到了解决,请参阅此以获取更多信息Resolving Named Pipes Error 40

【讨论】:

死链接。关于它所说的任何信息?【参考方案15】:

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

    启用命名管道 SQL 配置管理器 --> SQL Server 网络配置 --> 协议 --> 命名管道 --> 右键单击​​ --> 重新启动

    重启服务器 SQL 配置管理器 --> SQL Server 服务 --> SQL Server (SQLEXPRESS) --> 右键单击​​ --> 重新启动

    使用正确的服务器和实例名称(两者都是必需的!) 通常这将是 .\SQLEXPRESS,例如查看 QueryExpress 连接对话框中的屏幕截图。

你有它。

【讨论】:

因为您的高分答案相对较晚。它是什么,当您的服务与您的 sql server 通信正常,然后运行 ​​3 小时后,它开始出现此错误,持续 10 分钟左右。然后,服务继续像错误之前一样运行。 ??? 这是本地连接?通过网络进行远程连接还需要什么? 谢谢!这对我有用。我使用的是localhost 而不是.\SQLEXPRESS 这是我的解决方案。我首先使用 SQL Express 进行测试,然后使用 . 进行连接,但在安装完整的 SQL Server 后,我不得不将命名更改为 .\SQLEXPRESS,命名管道也被禁用,SQL 浏览器也被禁用【参考方案16】:

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

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

【讨论】:

【参考方案17】:

解决这个问题很容易:

    转到控制面板。 搜索服务。 从搜索结果中打开本地服务窗口 重新启动您的 MSSQLSERVER 服务。

步骤截图:

【讨论】:

哇,即使设置为自动,Management Studio 也不会启动我的服务,谢谢 谢谢,这有帮助。我每次都必须从这里启动服务吗?我以前不需要。 如果这里没有此服务怎么办?我已经安装了 SQL Server 17。我没有看到这个服务.... 进行 170GB 数据库备份时服务已停止。多亏了这一点,重新启动一个重要客户端正在使用的 sql server 只需要 5 分钟。非常感谢。 检查了所有操作,但重新启动对我不起作用。仍然出现同样的错误。【参考方案18】:

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

    检查 SQL Server 服务服务是否正常工作。 还要检查是否工作良好SQL Server (MSSQLSERVER)。 同时检查 SQL Server Browser 是否正常工作。 删除所有之前的别名,现在根据您的要求创建新别名。 现在检查 SQL Server 默认 端口 1433 的工作情况 接下来点击实例中的客户端协议,然后点击TCP/IP,现在点击鼠标右键,打开属性,在这里你可以确保你的工作正常你的默认端口 SQL 1433。 打开您的SQL Server Management Studio,然后右键单击,单击“Property”选项,然后单击Connections选项卡,最后勾选允许远程连接到此服务器。 检查是否正常工作或您的 Ping IP 主机

【讨论】:

【参考方案19】:

我试图在 VS2015 中添加新连接。这里的建议都没有奏效。怀疑向导中存在某种错误,特别是因为 SSMS 能够正常连接,所以我决定尝试欺骗它。成功了!

    不要添加连接,而是使用“创建新的 SQL Server 数据库”。输入您的服务器名称和新数据库的随机名称,例如“测试”。

    假设成功,在 VS 中打开服务器资源管理器,在 Data Connections 中找到连接,右键单击它并选择 Modify Connection。

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

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

【讨论】:

【参考方案20】:

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

【讨论】:

【参考方案21】:

在我意识到自己的错误之前,我在这个问题上苦苦挣扎了好久——我在连接字符串中使用了逗号而不是分号

【讨论】:

【参考方案22】:

我遇到了这个问题,但上面的建议都没有解决它。

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

【讨论】:

【参考方案23】:

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

【讨论】:

【参考方案24】:

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

首先您必须添加端口(例如 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,"无法注册服务主体名称",Null

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

【讨论】:

【参考方案25】:

我遇到了同样的问题。我使用 MSSQL Server Management Studio 2017 并使用以下步骤解决了这个问题:

    检查 SQL Server Services 服务是否正常工作。 还要检查 SQL Server (MSSQLSERVER) 是否运行良好。 还要检查 SQL Server Browser 是否正常工作。 重新启动 SQL Server (MSSQLSERVER)

并修复它。

【讨论】:

谢谢! SQL Server 浏览器被禁用,所以这为我修复了它!【参考方案26】:

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

你会看到

修复:

【讨论】:

感谢您提供屏幕截图并提及 Visual Studio!如此简单,但对于第一次这样做的人来说并不明显!【参考方案27】:

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

根据我阅读的内容,有很多繁琐的方法可以解决这个问题,但是来自tweaking.com 的工具能够删除和替换/修复我的 WMI(Windows Management Instrumentation)提供程序文件。

我曾经做过电脑维修,总体来说,tweaking.com 工具给我留下了深刻的印象,它是从我访问的一个 WMI 错误论坛页面中提出的。

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

希望这对某人有所帮助。

【讨论】:

【参考方案28】:

在您的服务器上打开端口号 1433 以进行 sql 远程连接

【讨论】:

【参考方案29】:

如果您正在使用 Asp.net 核心并使用 appsettings.json,而不是将服务器写入 localhost 并在为启用的命名管道写入 sql 实例名称之后,像这样

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

【讨论】:

【参考方案30】:

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 动态端口的更多信息:

How to configure SQL Server Port on multiple instances?

When is a Dynamic Port “dynamic”?

When to use a TCP dynamic port and when TCP Port?

我从 this 博客获得了解决问题的线索。

【讨论】:

以上是关于如何修复错误“命名管道提供程序,错误 40 - 无法打开与“SQL Server”的连接?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 WordPress 中的 HTTP 错误

如何修复 Ubuntu 中检测到系统程序错误的问题

如何修复“找不到名称'ClipboardItem'”错误?

如何修复 C++ 中的“分段错误”错误

分段错误错误(信号名称:SIGSEGV)的原因是啥,我将如何找到/修复它?

如何修复以下错误? [复制]