當用戶端電腦嘗試連線到 SQL Server 實例時,SQL Server 用戶端可能會變更通訊協定

本文介紹當用戶端計算機嘗試連線到 SQL Server 實例時,SQL Server 用戶端可能會變更通訊協定。

原始產品版本: SQL S
原始 KB 編號: 328383

摘要

具有 Microsoft 數據存取元件 (MDAC) 2.6 版或更新版本的用戶端電腦,可以嘗試使用多個通訊協定或進程間通訊 (IPC) 機制來建立與 SQL Server 的連線。

其他相關資訊

已對用戶端網路連結庫進行增強,Dbnetlib.dll MDAC 2.6 版和更新版本。 使用 MDAC 2.6 版和更新版本時,如果有多個通訊協定可用,而且第一個通訊協定的連線嘗試失敗,用戶端應用程式會立即嘗試使用其中一個其他通訊協定。

根據預設,用戶端具有 TCP 和命名管道作為可用的通訊協定。 您可以使用 SQL Server Client 公用程式來操作通訊協定排序。 用戶端應用程式會以用戶端電腦上指定的順序使用通訊協定。 通訊協定順序會儲存在 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 組態管理員
  • 當您在 DSN (建立 ODBC 資料來源名稱時)

如果您想要控制用戶端應用程式用於每次連線嘗試的通訊協定,但不允許用戶端嘗試多個通訊協定,您可以執行下列其中一項:

  • 使用 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