連線堆疊總覽
應用程式
│
▼
API / 物件庫層 (ODBC, DB-Library, OLE DB, ADO, ADO.NET)
│
▼
用戶端 Net-Library (DBMSSOCN, DBNMPNTW, DBMSSPXN ...)
│
▼
網路協定 (TCP/IP, Named Pipes, VIA, Shared Memory)
│
▼
SQL Server 伺服器端 Net-Library → TDS 封包處理 → 引擎
主流存取介面
| 介面 | 特性 | 典型提供者字串關鍵字 |
| OLE DB (SQLOLEDB) | COM 元件、MDAC 內建、ADO 底層、支援連線池、分散式交易 | Provider=SQLOLEDB |
| ADO (Classic) | 封裝 OLE DB、Script/VB6/ASP 常用、晚期繫結 | 同 SQLOLEDB |
| ODBC | C API、跨平台、查詢分析器/企業管理員仍使用 | Driver={SQL Server} |
| ADO.NET (SqlClient) | Managed Code、原生 TDS 協定、效能最佳、非同步、連線池、MARS | System.Data.SqlClient / Microsoft.Data.SqlClient |
| ADO.NET (OleDb) | 透過 OLE DB Provider、相容舊系統 | Provider=SQLOLEDB |
| ADO.NET (Odbc) | 透過 ODBC 驅動程式 | Driver={SQL Server} |
ADO.NET SqlClient 核心類別
SqlConnection:連線物件、連線字串、連線池控制。
SqlCommand:T-SQL/預存程序執行、參數化、`CommandType`。
SqlDataReader:前向唯讀資料流、低記憶體、高效能。
SqlDataAdapter:斷層資料集填充、`Fill`/`Update`、配合 `DataSet`/`DataTable`。
SqlParameter:強型別參數、防注入、輸出/雙向參數。
用戶端 Net-Library 詳解
位於 `C:\Windows\System32`(64 位)或 `SysWOW64`(32 位),常見:
| 檔案名 | 協定 | 用途 |
| dbmssocn.dll | TCP/IP | 預設、跨網路、效能佳 |
| dbnmpntw.dll | Named Pipes | 本機/內網、SMB 依賴、穿透防火牆較易 |
| dbmsvinn.dll | VIA | 高效能叢集、需專用硬體 |
| dbmsrpcn.dll | Multiprotocol (RPC) | 舊版相容、已棄用 |
可用 用戶端網路公用程式 (cliconfg.exe) 設定預設/別名/啟用順序。
共享記憶體 Net-Library:本機連線極速之道
- 僅限用戶端與伺服器同機。
- 繞過完整網路堆疊,直接讀寫記憶體對應檔案(Memory-Mapped File)。
- 同步靠 Kernel 物件,延遲極低(微秒級),吞吐極高。
- 連線字串指定 `lpc:` 前綴或本機 `(local)` 自動協商優先使用。
疑難排解實用技巧
- 確認實際使用的提供者/協定:`SELECT net_transport, protocol_type FROM sys.dm_exec_connections WHERE session_id = @@SPID`
- 強制指定協定:連線字串 `Network Library=dbmssocn` (TCP) / `dbnmpntw` (NP) / `lpc` (Shared Memory)。
- 檢查連線池:`Pooling=true; Min Pool Size=5; Max Pool Size=100`,洩露常因未 `Close`/`Dispose`。
- 啟用追蹤:`Trace=True; LogFile=sql_client.log` (OLE DB) / `SqlClient` 事件追蹤。
- 上一篇文章: SQL 入門必讀:常用查詢、分組、聯集、多表聯結與子查詢實例總結
- 下一篇文章: Oracle PL/SQL 入門實戰:從建表、資料初始化、複合查詢更新到觸發器審計與套件測試
Copyright ©
程式碼之家 All Rights Reserved