ADO.NET 採用 **離線架構** — 資料從資料庫取出後緩存在本地 `DataSet`,無需持續連線。理解核心對象模型是高效資料開發的前提。



using System.Data.SqlClient;
private void Form1_Load(object sender, EventArgs e) {
string cmdText = "select foodname, id, foodprice from tb_food";
string connStr = "server=.;database=db_MrCy;uid=sa;pwd=";
SqlDataAdapter adapter = new SqlDataAdapter(cmdText, connStr);
DataSet ds = new DataSet();
adapter.Fill(ds); // 斷開連線後 ds 仍保有資料
DataTable dt = ds.Tables[0];
foreach (DataRow row in dt.Rows) {
listBox1.Items.Add(row["foodname"]);
}
}
// 獲取單一值
MessageBox.Show(dt.Rows[2]["foodname"].ToString()); // 第 3 行 foodname

| 概念 | 說明 |
|---|---|
| 離線架構 | 連線 → 取數據 → 斷線 → 本地操作 → 連線 → 批次更新。減少資料庫連線佔用,提升擴展性。 |
| DataSet 結構 | 僅包含 SELECT 子句指定的欄位 (此例 foodname/id/foodprice),非整表所有欄位。 |
| DataRow 狀態 | `RowState` 屬性:`Unchanged`/`Added`/`Modified`/`Deleted`,驅動 `Update` 邏輯。 |
| 強類型 DataSet | VS 設計器生成 `.xsd` → 衍生類,提供 `ds.Tables[0].Rows[0].FoodName` 型別安全存取。 |
掌握 DataSet/DataTable/DataAdapter 三角鐵三角,即掌握 ADO.NET 80% 核心應用場景。