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

Dam*_*ien 139 sql-server sql-server-2005 database-connectivity

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

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

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

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

我还能在这做什么?

Kaz*_*zem 108

解决这个问题非常简单:

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

步骤截图:

步骤的屏幕截图

  • 检查了所有操作,但重新启动对我不起作用。仍然得到同样的错误。 (3认同)
  • 如果此服务不在这里怎么办?我已经安装了SQL Server17。没有看到此服务。 (2认同)
  • 制作 170GB 数据库备份服务停止。多亏了这一点,重新启动重要客户端正在使用的 sql server 只需要 5 分钟。非常感谢。 (2认同)

miz*_*shu 80

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

我花了大约一个小时试图弄清楚什么是SERVER/INSTANCENAME什么是错误的,当一切配置正确,命名管道,用户访问权限......然后它突然袭击我,它不是斜线,它是一个反斜杠(\).

恐怖,耻辱......

  • 我遇到了OP的问题,原来我错过了**SERVER/INSTANCENAME**信息(那里有一个点). (2认同)

Pom*_*air 42

安装SQL Server后,这是一个三步过程:

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

命名管道已启用

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

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

在此输入图像描述

你有它.


小智 18

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

如果选择一个命名实例,并调用命名实例SSQDatabase1,则您的pc名称为PCX1.您必须输入PCX1\SSQDatabase1而不仅仅是SSQDatabase1,否则您将收到命名管道错误.


Kha*_*han 15

MSDN Social上的一个帖子,Re:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接,有一个相当不错的列表,列出了与您的错误相关的可能问题.您可能想看看它们中的任何一个是否正如您所遇到的那样.

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

  • 好的,想一想.事实证明,当我安装服务器时,我做了一个命名实例.您无法以与默认实例相同的方式连接到命名实例.所以,数据源:localhost \有效的实例名称.仍然无法使用IP地址,但很高兴终于连接. (4认同)

小智 10

我刚刚在Sql Server配置管理器中启用了TCP/IP,VIA,命名管道,我的问题得到了解决请参阅此更多信息解决命名管道错误40


小智 7

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


小智 6

感谢Damian ......

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

Web Config ....(对于localhost)

<add name="FooData" connectionString="Data Source=localhost\InstanceName;Initial Catalog=DatabaseName;Integrated Security=True;" providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)


hal*_*nlv 5

有同样的问题.不得不迁移一些服务器时花了6个小时.尝试了有关此主题和其他人的所有建议.

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


RBT*_*RBT 5

TL;DR:您的 SQL Server 实例正在使用动态端口,因此它无法工作。强制 SQL Server 服务使用静态端口#1433 使其正常工作。

\n

详细说明:在开始详细说明之前,让我们首先了解可能发生此问题的场景。

\n

每当我们在计算机上运行 SQL Server 安装程序时,它都会要求我们输入服务实例的名称。为什么它要求它?原因是 SQL Server 安装程序提供了一种工具,您可以通过该工具在同一计算机上安装和运行 SQL Server 服务的多个实例。由于多种原因,您可能希望在同一个机器上运行多个 SQL Server 服务实例,例如,您的资产中没有更多物理服务器、隔离 SQL Server 实例故障、负载平衡等。在同一台机器上,您必须为每个服务实例指定唯一的名称。看看我的机器(参见屏幕截图)。我只有一个服务实例,它是 SQL Server 的默认服务实例:

\n

在此输入图像描述

\n

对于通过 SQL Server 安装程序设置的每个新实例,此服务控制台窗口中将出现一个新行,其“名称”列中具有相同的SQL Server前缀。括号中的文本(MSSQLSERVER)是服务实例的名称。要了解 SQL Server 服务实例的命名约定,请参阅答案末尾的推论部分。

\n

因此,如果在给定计算机上运行多个 SQL Server 服务实例,则可能会出现此问题。当您有两个或两个以上的 SQL Server 实例在同一个机器上运行时,有两种可能的配置:

\n
    \n
  1. 默认实例和一个或多个命名实例的组合
  2. \n
  3. 仅两个或多个命名实例的组合,即没有默认实例。如果您愿意,SQL Server 安装程序并不强制要求安装默认实例。当我遇到这个问题时,我在我的服务器上遵循了这个配置。
  4. \n
\n

关键概念:计算机上安装的每个 Microsoft SQL Server 服务实例都使用不同的端口来侦听传入的 SQL 连接请求。换句话说,每个 SQL Server 服务都是一个附加到唯一端口号的不同进程。SQL Server 的默认实例使用端口# 1433。当您安装命名实例时,它们将开始使用动态端口,该端口是在启动与命名 SQL Server 实例相对应的 Windows 服务时决定的。

\n

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

\n

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

\n

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

\n

在此输入图像描述

\n

在连接字符串中明确使用该端口号或sqlcmd如下所示:

\n
sqlcmd -s mymachinename,11380 -i deleteDB.sql -o SQLDelete.txt\n
Run Code Online (Sandbox Code Playgroud)\n

解决方案#3:强制您的命名实例使用端口#1433,否则默认实例将使用该端口。请记住,仅当您没有计算机上运行任何默认 SQL Server 实例时,此解决方案才有效,因为端口 # 1433 已被使用。在任何操作系统中,给定的端口号永远不能同时被两个进程使用。归根结底,我们的 SQL Server 服务实例也是一个进程。

\n

将TCP 动态端口字段设置为空白,并将TCP 端口字段设置为 1433。

\n

在此输入图像描述

\n

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

\n
sqlcmd -s mymachinename\\instanceName -i deleteDB.sql -o SQLDelete.txt\n
Run Code Online (Sandbox Code Playgroud)\n

或者

\n
sqlcmd -s mymachinename,1433 -i deleteDB.sql -o SQLDelete.txt\n
Run Code Online (Sandbox Code Playgroud)\n

注意:保存 TCP/IP 设置后,请重新启动 SQL Server 服务实例。

\n

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

\n

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

\n

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

\n

什么时候是动态端口 \xe2\x80\x9cdynamic\xe2\x80\x9d?

\n

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

\n

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

\n

推论:SQL Server 实例的名称遵循下面提到的逻辑

\n
    \n
  1. 对于默认实例,它与托管 SQL Server 服务的计算机的名称相同。它是预定义的。用户在安装过程中无法更改它。不要对服务名称中的后缀(MSSQLSERVER)感到困惑。它是一个仅与服务器端相关的内部管理名称。客户端应用程序永远不会知道这一点。

    \n
  2. \n
  3. 对于命名实例,它是特定格式的串联字符串,如下所示 - <托管 SQL Server 服务的计算机的名称> \\ <用户定义的实例名称>

    \n

    在此输入图像描述

    \n
  4. \n
\n

专业提示:默认 SQL Server 实例也可以通过几个别名进行连接,这些别名易于键入且直观易记。但只有当您尝试从服务主机本身连接到服务实例时才能使用别名。在这种情况下,您还可以使用下面提到的别名来代替主机名:

\n
    \n
  1. \n
  2. (当地的)
  3. \n
\n

从远程计算机连接到 SQL Server 服务实例时,只有标准名称才有效。

\n


归档时间:

查看次数:

568599 次

最近记录:

6 年,2 月 前