使用 Microsoft.Data.SqlClient 的 ADO.NET 架構

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 填入並更新中斷連線的 DataSetDataTable 物件。
DbBatch SqlBatch 在支援的目標框架上,將多個指令作為一個批次發送。

當函式庫必須支援多個資料庫提供者時,應根據 ADO.NET 抽象層進行程式設計。 當應用程式針對 SQL Server 並需要提供者專屬功能時,請使用 SqlClient 類型。

連網資料存取

連線存取在指令執行及應用程式讀取結果時,保持連線可用。

常見的請求順序如下:

  1. 從連線字串建立SqlConnection
  2. 開啟連線。
  3. 建立 SqlCommand 並新增 SqlParameter 值。
  4. 執行 命令。
  5. 處理純量值、受影響列計數或 SqlDataReader
  6. 釋放讀取器、命令和連線。

大多數網頁 API、服務、工作者及命令列應用程式都使用連網存取。 SqlDataReader 會以串流方式處理資料列,通常比將整個結果載入到 DataSet 中更省記憶體。

對於每個工作單元,開啟並處置一個 SqlConnection 是常見模式。 連線池會重複使用底層的實體連線。 不要在應用程式整個生命週期內都保持一個全球連線開啟。

離線資料存取

SqlDataAdapter 在 SQL Server 與記憶體內的 DataSetDataTable 之間傳輸資料。 應用程式可以在讀取或更改記憶體資料時關閉連線,然後再重新連線以提交更新。

如果您需要以下功能,請使用中斷連線存取:

  • 資料綁定至 DataSetDataTable
  • 記憶體內關係與約束。
  • 稍後同步的離線編輯。
  • 與以 DataAdapters 為核心的現有應用程式相容性。

對於新的請求導向服務,建議從 SqlCommandSqlDataReader 開始,除非你需要分離式物件模型。

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

SqlConnectionSqlCommandSqlDataReaderSqlTransaction 不支援由多個執行緒同時使用。 讓每個並行作業各自使用自己的連線,並利用連線集區機制。 多重主動結果集(MARS)允許連線上有多個主動結果集,但並不保證 SqlClient 物件是執行緒安全的。

套件與命名空間

安裝 Microsoft.Data.SqlClient NuGet 套件並匯入 Microsoft.Data.SqlClient 命名空間。 驅動程式獨立於 .NET 發佈,因此其功能、發布與支援時程與 .NET 執行時間不同。

System.Data.SqlClient 是較舊的提供者。 新的開發作業請使用 Microsoft.Data.SqlClient。 對於現有的應用程式,請參閱從 System.Data.SqlClient 遷移至 Microsoft.Data.SqlClient