承接上一篇介紹 ADO.NET 核心物件(Connection、Command、DataReader)之後,本文將深入探討 ADO.NET 中極具實用價值的「資料配接器」與「記憶體資料表」相關物件。掌握這些概念,能讓您在 Windows Forms 應用程式中更靈活地處理離線資料操作。
DataAdapter 是 ADO.NET 受控提供者的核心組件,專責在資料來源(如 SQL Server)與 DataSet 之間雙向交換資料。它封裝了開啟/關閉連線、執行命令等繁瑣細節,讓開發者專注於資料邏輯。
常用方法:
Fill(DataTable):執行 SELECT 指令,將結果填入 DataTable,自動建立資料表結構。Update(DataSet):檢查 DataSet 中的行狀態(新增、修改、刪除),自動產生對應的 INSERT/UPDATE/DELETE 命令回寫資料庫。Dispose():釋放非受控資源。DataSet 位於 System.Data 命名空間,是離線架構的核心。它在記憶體中快取從資料庫檢索的資料,擁有完整的關聯式結構:DataTable 集合、DataRelation、Constraint 等。支援標準的檢視、新增、刪除、更新操作,且不限於資料庫資料,也能處理 XML、集合等資料來源。
DataTable 代表記憶體中一張關聯式資料表,可獨立使用,亦常作為 DataSet 的成員。擁有 Columns、Rows、Constraints 等屬性,提供豐富的資料操作方法。
沿用上一篇的專案,示範如何使用 SqlDataAdapter 填充 DataTable 並綁定至 DataGridView,結合 ComboBox 實現條件查詢。
從工具箱拖曳一個 DataGridView(命名為 dataGridView1)與一個 ComboBox(comboBox1)至表單,並添加一個「查詢」按鈕(button4)。
///
/// 查詢所有用戶,回傳 DataTable
///
public DataTable GetAllUsers()
{
string sql = "SELECT * FROM Users";
DataTable dt = new DataTable();
// SqlDataAdapter 自動處理連線開啟/關閉
SqlDataAdapter da = new SqlDataAdapter(sql, Conn);
da.Fill(dt);
return dt;
}
///
/// 依使用者名稱模糊查詢
///
public DataTable GetUsersByName(string name)
{
string sql = "SELECT * FROM Users WHERE Username LIKE '%" + name + "%'";
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(sql, Conn);
da.Fill(dt);
return dt;
}
關鍵點: SqlDataAdapter 建構子直接接收 SQL 字串與連線物件,Fill() 會自動開啟連線、執行查詢、關閉連線,極大簡化程式碼。
private Users u = new Users(); // 實例化資料類
private void RefreshData()
{
// 綁定所有用戶至 DataGridView
dataGridView1.DataSource = u.GetAllUsers();
// 填充 ComboBox 供查詢選擇
comboBox1.Items.Clear();
foreach (string userName in u.GetUserList()) // 假設 GetUserList 回傳 ArrayList
{
comboBox1.Items.Add(userName);
}
}
private void Form2_Load(object sender, EventArgs e)
{
RefreshData();
}
private void button4_Click(object sender, EventArgs e)
{
string name = comboBox1.Text.Trim();
if (!string.IsNullOrEmpty(name))
{
dataGridView1.DataSource = u.GetUsersByName(name);
}
else
{
RefreshData(); // 若無輸入則顯示全部
}
}
本文實作展示了 DataAdapter 搭配 DataTable 實現離線資料操作的典型模式:Fill 填充 → 記憶體操作 → Update 回寫。此模式適用於中小型資料量、需頻繁互動的 WinForm 場景。後續文章將深入探討 DataSet 的關聯關係、事務處理與進階更新策略。
本文出自「共享經驗」部落格,原文連結:https://jianle.blog.51cto.com/429692/109801