| 屬性 | 用途 | 典型 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 |
關鍵方法與屬性
// 填充 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 確保原子性。
效能優化清單
- 設定
UpdateBatchSize > 1 啟用批次更新 (SQL Server 需 2008+)。
- 避免
Select *,明確列出欄位減少網路傳輸。
- 大量資料操作考慮
SqlBulkCopy 替代 DataAdapter.Update。
- 及時釋放:
adapter.Dispose() 或使用 using 區塊。
- 上一篇文章: PowerDesigner 15.1 進階使用技巧 (四):遞歸關係、繼承建模、標識符與顯示優化
- 下一篇文章: ADO.NET 核心組件深度解析 (二):Connection 與 Command 物件
Copyright ©
程式碼之家 All Rights Reserved