SQL Server客户端计算机尝试连接到实例时,客户端可能会更改协议SQL Server

本文介绍SQL Server客户端计算机尝试连接到 SQL Server 实例时,客户端可能会更改协议。

原始产品版本:SQL Server
原始 KB 编号: 328383

摘要

具有 Microsoft 数据访问组件 (MDAC) 2.6 或更高版本的客户端计算机可以尝试使用多个协议或进程间通信 (IPC) 机制来建立与SQL Server的连接。

更多信息

对客户端网络库进行了增强,Dbnetlib.dll MDAC 版本 2.6 及更高版本。 在 MDAC 版本 2.6 及更高版本中,如果有多个协议可用,并且第一个协议的连接尝试失败,客户端应用程序将立即尝试使用其他协议之一。

默认情况下,客户端将 TCP 和命名管道作为可用协议。 可以使用 SQL Server 客户端实用工具操作协议排序。 客户端应用程序按客户端计算机上指定的顺序使用协议。 协议顺序存储在以下注册表项位置的 ProtocolOrder 值下:

HKLM\Software\Microsoft\MSSQLServer\Client\SuperSocketNetLib

如果使用 SQL Server 2005,则协议顺序存储在 ProtocolOrder 注册表项下面的注册表子项中:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SNI<version>

例如,如果客户端计算机同时提供 TCP 和命名管道,并且顺序为:

  • TCP
  • 命名管道

当客户端计算机尝试与服务器建立 TCP 连接,并且连接尝试返回非零返回代码时,客户端将使用列表中的下一个协议(命名管道)以透明方式尝试连接。 在这种情况下,客户端无法建立 TCP 连接;但是,客户端已成功建立命名管道连接。

注意

客户端不会收到指示第一个协议失败的错误。

如果客户端应用程序使用第二个协议,并且它还返回错误,则会将错误返回到客户端。

如果使用以下方法之一创建别名,客户端应用程序将使用别名信息来建立与服务器的连接,并且不使用任何其他协议。

  • 使用 SQL Server 客户端网络实用工具
  • 通过使用 SQL Server 配置管理器
  • 创建 ODBC 数据源名称时, (DSN)

如果要控制客户端应用程序用于每次连接尝试的协议,并且不允许客户端尝试多个协议,可以执行下列操作之一:

  • 使用 SQL 客户端网络实用工具或SQL Server 配置管理器通过指定首选协议来创建别名。

  • 在连接字符串中指定协议。 例如:

    DSN=DSNName;SERVER=servername;DATABASE=YourDataBaseName;Network=DBMSSOCN;Address=IP_Address,1433;UID=YourUID;PWD=YourPassword;
    

    在此示例中,将网络协议指定为 DBMSSOCN,这意味着要使用 TCP/IP 协议。 如果在连接字符串内指定协议,则 Dbnetlib 仅使用指定的协议,而不尝试任何其他协议。 同样,若要仅启用命名管道协议,请使用如下所示的连接字符串:

    DSN=DSNName;SERVER=servername;DATABASE=YourDataBaseName;Network=DBNMPNTW;Address=\\.\pipe\sql\query;UID=YourUID;PWD=YourPassword;
    
  • 使用客户端网络实用工具删除其他协议。

引用

解决连接错误以SQL Server