ADO.NET 是內建於 .NET 中的資料存取模型。 Microsoft。Data.SqlClient 實作了該模型,適用於 SQL Server 相容的資料庫,並新增了 SQL Server 專屬的功能。
Microsoft.Data.SqlClient 的登陸頁面提供驅動程式功能圖與生產基線。 本文說明了驅動程式如何融入 ADO.NET。
ADO.NET 抽象與 SqlClient 類型
ADO.NET 定義了命名空間中System.Data.Common提供者無關的抽象。 Microsoft。Data.SqlClient 提供具體實作。
| ADO.NET 抽象化 | SqlClient 類型 | Purpose |
|---|---|---|
| DbConnection | SqlConnection | 建立與某個資料庫的邏輯連線。 |
| DbCommand | SqlCommand | 執行 SQL 文字或儲存程序。 |
| DbParameter | SqlParameter | 會將輸入值與命令文字分開傳送。 |
| DbDataReader | SqlDataReader | 從伺服器串流傳送結果資料列。 |
| DbTransaction | SqlTransaction | 將指令分組為單一原子交易。 |
| DbDataAdapter | SqlDataAdapter | 填入並更新中斷連線的 DataSet 和 DataTable 物件。 |
| DbBatch | SqlBatch | 在支援的目標框架上,將多個指令作為一個批次發送。 |
當函式庫必須支援多個資料庫提供者時,應根據 ADO.NET 抽象層進行程式設計。 當應用程式針對 SQL Server 並需要提供者專屬功能時,請使用 SqlClient 類型。
連網資料存取
連線存取在指令執行及應用程式讀取結果時,保持連線可用。
常見的請求順序如下:
- 從連線字串建立
SqlConnection。 - 開啟連線。
- 建立
SqlCommand並新增SqlParameter值。 - 執行 命令。
- 處理純量值、受影響列計數或
SqlDataReader。 - 釋放讀取器、命令和連線。
大多數網頁 API、服務、工作者及命令列應用程式都使用連網存取。
SqlDataReader 會以串流方式處理資料列,通常比將整個結果載入到 DataSet 中更省記憶體。
對於每個工作單元,開啟並處置一個 SqlConnection 是常見模式。 連線池會重複使用底層的實體連線。 不要在應用程式整個生命週期內都保持一個全球連線開啟。
離線資料存取
SqlDataAdapter 在 SQL Server 與記憶體內的 DataSet 或 DataTable 之間傳輸資料。 應用程式可以在讀取或更改記憶體資料時關閉連線,然後再重新連線以提交更新。
如果您需要以下功能,請使用中斷連線存取:
- 資料綁定至
DataSet或DataTable。 - 記憶體內關係與約束。
- 稍後同步的離線編輯。
- 與以 DataAdapters 為核心的現有應用程式相容性。
對於新的請求導向服務,建議從 SqlCommand 和 SqlDataReader 開始,除非你需要分離式物件模型。
SQL Server 專屬功能
Microsoft.Data.SqlClient 新增了不屬於與提供者無關的 ADO.NET 合約一部分的 API 和連線行為:
- Microsoft Entra 認證與存取權杖回撥。
- TDS 8.0 採用嚴格加密與 SQL Server 憑證選項。
- 永遠是加密且安全的飛地。
-
SqlBulkCopy用於高吞吐量資料載入。 - 資料表值參數。
- SQL Server 資料型別,包括 JSON 和向量型別。
- 可設定重試邏輯。
- SQL Server 診斷、統計與計數器。
- 可用性群組與故障轉移連線選項。
使用這些功能會使該程式碼綁定於 Microsoft.Data.SqlClient。 如果應用程式其他部分必須保持提供者獨立,則將提供者專用程式碼保留在資料存取邊界後方。
物件壽命與並行性
迅速處置連線、指令、讀取器、交易及批量複製物件。 當型別實作 await using 時,請搭配非同步程式碼使用 IAsyncDisposable。
SqlConnection、SqlCommand、SqlDataReader 和 SqlTransaction 不支援由多個執行緒同時使用。 讓每個並行作業各自使用自己的連線,並利用連線集區機制。 多重主動結果集(MARS)允許連線上有多個主動結果集,但並不保證 SqlClient 物件是執行緒安全的。
套件與命名空間
安裝 Microsoft.Data.SqlClient NuGet 套件並匯入 Microsoft.Data.SqlClient 命名空間。 驅動程式獨立於 .NET 發佈,因此其功能、發布與支援時程與 .NET 執行時間不同。
System.Data.SqlClient 是較舊的提供者。 新的開發作業請使用 Microsoft.Data.SqlClient。 對於現有的應用程式,請參閱從 System.Data.SqlClient 遷移至 Microsoft.Data.SqlClient。