首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

ADO.NET 實戰進階(二):DataSet 內部架構、DataTable 約束與唯一鍵/外鍵實作詳解

     編輯:關於.NET

DataSet 內部結構:記憶體中的關聯式資料庫

DataSet 由 DataTable(表) 與 Relations(關聯) 組成。DataTable 內含:

  • DataColumn 集合:欄位定義
  • DataRow 集合:資料列
  • Constraints(約束):UniqueConstraint(唯一鍵)、ForeignKeyConstraint(外鍵)

程式化建構 DataSet 完整範例

DataSet ds = new DataSet();
DataTable tb1 = new DataTable("table1");
DataTable tb2 = new DataTable("table2");
ds.Tables.Add(tb1); ds.Tables.Add(tb2);

// table1:id, name
tb1.Columns.Add("id", typeof(int));
tb1.Columns.Add("name", typeof(string));
tb1.Rows.Add(1, "張三");
tb1.Rows.Add(2, "李四");

// table2:table1_id, sex
tb2.Columns.Add("table1_id", typeof(int));
tb2.Columns.Add("sex", typeof(string));
tb2.Rows.Add(1, "男");

GridView1.DataSource = ds.Tables["table1"].DefaultView;
GridView2.DataSource = ds.Tables["table2"].DefaultView;

約束實作:唯一鍵與外鍵

唯一鍵

UniqueConstraint uc = new UniqueConstraint("unique", ds.Tables["table1"].Columns["id"]);
ds.Tables["table1"].Constraints.Add(uc);

設定後,id 欄位值不可重複。嘗試修改為既有值會拋出例外:「列 'id' 被約束為是唯一的。值 '2' 已存在。」

外鍵

ForeignKeyConstraint fk = new ForeignKeyConstraint("fk",
    ds.Tables["table1"].Columns["id"], ds.Tables["table2"].Columns["table1_id"]);
ds.Tables["table2"].Constraints.Add(fk);

設定後,修改 table1 的 id 值,table2 的 table1_id 會自動跟著變更,維護參考完整性。

修改 DataTable 資料

ds.Tables["table1"].Rows[0][0] = 3;  // 修改第 0 列第 0 欄
// 或 ds.Tables["table1"].Rows[0]["id"] = 3;

DefaultView 與視圖的關係

ds.Tables["table1"].DefaultView 是 DataTable 自動建立的預設視圖。直接繫結 ds.Tables["table1"] 也可運作,因 GridView 內建視圖能力。但若需自訂排序/篩選,應操作明確的 DataView 實例並繫結該實例。

下一步預告

DataSet 關聯關係如何應用?SqlDataAdapter 如何高效填充 DataSet?請見下一篇「ADO.NET 實戰進階(三):DataView 與關聯關係」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved