首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SQL Server 2008 客戶端連接失敗:命名管道錯誤 40 排查全攻略

     編輯:程式設計綜合問答

現象描述

客戶端原本可連接 SQL Server 2008,突然出現:

「與網絡相關的或特定於實例的錯誤發生了建立與 SQL Server 的連接時。找不到或無法訪問服務器。請驗證實例名稱是否正確,並且 SQL Server 已配置為允許遠程連接。(provider: 命名管道提供程序, error: 40 - 無法打開到 SQL Server 的連接)」

同網段其他機器連接正常,客戶端能 ping 通服務器 IP。

核心原因:協議不匹配

錯誤明確提示 provider: 命名管道提供程序, error 40。這意味著:

  • 客戶端連接字符串或配置導致驅動程序嘗試使用 Named Pipes (命名管道) 協議。
  • 命名管道僅適用於本機進程間通信,不支持跨網絡連接。
  • 正確的遠程連接應使用 TCP/IP 協議。

排查步驟(按優先級)

1. 檢查連接字符串 —— 最常見原因

連接字符串中不要包含 Network Library=dbnmpntw 或隱式指定命名管道。標準 TCP/IP 連接字符串範例:

Server=192.168.1.100,1433;Database=MyDB;User Id=sa;Password=xxx;Network Library=dbmssocn;
  • Server:IP 地址 + 端口(默認 1433,若實例名需用 IP\InstanceName)。
  • Network Library=dbmssocn:強制使用 TCP/IP Sockets(可選,驅動通常自動協商)。

2. 服務端配置:啟用 TCP/IP 協議

  1. 打開 SQL Server Configuration Manager。
  2. 展開 SQL Server Network Configuration → 選擇對應實例(如 Protocols for MSSQLSERVER)。
  3. 右鍵 TCP/IP → Enable。
  4. 雙擊 TCP/IP → IP Addresses 標籤 → 確認 IPAll 下 TCP Port 為 1433(或自定義端口)。
  5. 重啟 SQL Server 服務(右鍵 SQL Server Services → Restart)。

3. 服務端配置:允許遠程連接

  • SSMS 連接服務器 → 右鍵服務器名 → Properties → Connections → 勾選 Allow remote connections to this server。

4. 防火牆與端口

  • Windows 防火牆入站規則:允許 sqlservr.exe 或端口 1433/TCP(及 SQL Browser 服務的 1434/UDP)。
  • 若使用命名實例,確保 SQL Server Browser 服務運行中(解析實例名到端口)。

5. 客戶端別名與驅動

  • SQL Server Configuration Manager (32-bit/64-bit) → SQL Native Client Configuration → Alias:檢查是否有錯誤別名強制指向命名管道。
  • 優先使用新版驅動(ODBC Driver 17/18 for SQL Server 或 OLEDB 18),避免舊版 SQLNCLI10 默認行為差異。

快速驗證命令

REM 測試 TCP 端口連通性
telnet 192.168.1.100 1433

REM 或 PowerShell
Test-NetConnection -ComputerName 192.168.1.100 -Port 1433

若 telnet 通、PowerShell TcpTestSucceeded=True,說明網絡層面無阻礙,問題在 SQL 配置或連接字符串。

參考資源

總結

Error 40 九成以上是客戶端誤用命名管道或服務端未啟用 TCP/IP。按本文順序檢查:連接字符串 → 服務端協議 → 防火牆 → 別名/驅動,通常 10 分鐘內解決。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved