首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

ADO.NET 核心組件深度解析 (三):DataAdapter 資料適配器

     編輯:DB2 教學

ADO.NET 核心組件深度解析 (三):DataAdapter 資料適配器

DataAdapter 是 ADO.NET 架構中最複雜、功能最豐富的組件,作為 DataSet (離線資料容器) 與資料源之間的橋樑。它封裝了 Command、Connection、DataReader 等底層物件,提供填充 DataSet 與同步更新資料源的雙向通道。

核心定位與工作原理

  • 橋樑角色: 連接離線的 DataSet 與線上資料庫。
  • 雙向流動:
    • 讀取 (Fill): 使用 SelectCommand 執行查詢,將結果集填充至 DataTable。
    • 更新 (Update): 檢測 DataSet 中 RowState (Added/Modified/Deleted),依序執行 InsertCommand/UpdateCommand/DeleteCommand 同步回資料庫。
  • 批次處理: UpdateBatchSize 屬性控制批次更新筆數,提升大量寫入效能。

四大核心 Command 屬性

關鍵方法與屬性

// 填充 DataSet/DataTable
int rowsAffected = adapter.Fill(dataSet, "Users");  // 返回影響行數

// 同步更新回資料庫
int updatedRows = adapter.Update(dataSet, "Users"); // 必須設定 Insert/Update/DeleteCommand

// 參數對應配置 (關鍵)
adapter.InsertCommand.Parameters.Add("@Name", SqlDbType.NVarChar, 50, "Name");
adapter.UpdateCommand.Parameters.Add("@Id", SqlDbType.Int, 0, "Id").SourceVersion = DataRowVersion.Original;

// 事件機制
adapter.RowUpdating += (sender, e) => { /* 更新前驗證/日誌 */ };
adapter.RowUpdated += (sender, e) => { /* 更新後處理/錯誤處理 */ };

CommandBuilder 自動生成命令 (簡化開發)

// 僅需提供 SelectCommand,自動生成 Insert/Update/DeleteCommand
// 前提:SelectCommand 單表查詢、包含主鍵、無複雜 JOIN
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
adapter.InsertCommand = builder.GetInsertCommand();
adapter.UpdateCommand = builder.GetUpdateCommand();
adapter.DeleteCommand = builder.GetDeleteCommand();

進階應用場景

  • 樂觀並發控制: UpdateCommand WHERE 條件包含原始時間戳/版本欄位,DBConcurrencyException 捕獲衝突。
  • 分頁載入: Fill(dataSet, startRecord, maxRecords, "TableName") 實現客戶端分頁。
  • Schema 分離: FillSchema 僅載入結構不載入資料,MissingSchemaAction.AddWithKey 自動補充主鍵資訊。
  • 交易整合: 將 DataAdapter 命令納入 SqlTransaction 確保原子性。

效能優化清單

  1. 設定 UpdateBatchSize > 1 啟用批次更新 (SQL Server 需 2008+)。
  2. 避免 Select *,明確列出欄位減少網路傳輸。
  3. 大量資料操作考慮 SqlBulkCopy 替代 DataAdapter.Update。
  4. 及時釋放:adapter.Dispose() 或使用 using 區塊。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
屬性用途典型 SQL
SelectCommand查詢資料,Fill() 必備SELECT * FROM Users WHERE Id = @Id
InsertCommand新增資料同步INSERT INTO Users (Name, Age) VALUES (@Name, @Age)
UpdateCommand修改資料同步UPDATE Users SET Name=@Name, Age=@Age WHERE Id=@Id
DeleteCommand刪除資料同步DELETE FROM Users WHERE Id=@Id