在 C# 中,DataTable 代表記憶體中的資料表。您可以透過建構函式直接建立實例,並指定表格名稱:
DataTable tbl = new DataTable("TableName");
DataSet 的 Tables 集合可容納多個 DataTable。有兩種常見寫法:
// 寫法一:先建立 DataTable 再加入
DataSet ds = new DataSet();
DataTable tbl = new DataTable("Customers");
ds.Tables.Add(tbl);
// 寫法二:直接透過 DataSet 建立並加入
DataSet ds = new DataSet();
DataTable tbl = ds.Tables.Add("Customers");
注意: 一個 DataTable 同一時間只能屬於一個 DataSet。若需加入多個 DataSet,必須使用 Copy()(複製結構與資料)或 Clone()(僅複製結構)方法建立新實例。
透過 Columns.Add 方法可新增欄位,並可設定屬性如 AllowDBNull、MaxLength、Unique。主鍵則指派給 PrimaryKey 屬性(接受 DataColumn 陣列):
DataTable tbl = ds.Tables.Add("Orders");
DataColumn col = tbl.Columns.Add("OrderID", typeof(int));
col.AllowDBNull = false;
col.MaxLength = 5;
col.Unique = true;
// 設定主鍵(此處假設 CustomersID 欄位已存在)
tbl.PrimaryKey = new DataColumn[] { tbl.Columns["CustomersID"] };
當欄位被設為主鍵時,AllowDBNull 會自動設為 false。
適合用於身分識別欄位。設定 AutoIncrement、AutoIncrementSeed(起始值)、AutoIncrementStep(遞增間距),並通常將 ReadOnly 設為 true:
DataSet ds = new DataSet();
DataTable tbl = ds.Tables.Add("Orders");
DataColumn col = tbl.Columns.Add("OrderID", typeof(int));
col.AutoIncrement = true;
col.AutoIncrementSeed = -1;
col.AutoIncrementStep = -1;
col.ReadOnly = true;
可在建立欄位時直接指定運算式,例如依據其他欄位計算總價:
tbl.Columns.Add("ItemTotal", typeof(Decimal), "Quantity * UnitPrice");
主要有兩種方式:
DataRow row = ds.Tables["Customers"].NewRow();
row["CustomerID"] = "ALFKI";
ds.Tables["Customers"].Rows.Add(row);
object[] aValues = { "ALFKI", "Alfreds", "Anders", "030-22222" };
ds.Tables["Customers"].LoadDataRow(aValues, false);
第二個參數 false 表示不保留變更狀態(即不標記為已修改)。