|
DataSet是ADO.NET開發(fā)人員為方便數(shù)據(jù)處理開發(fā)出來(lái)的,是數(shù)據(jù)的集合,是為解決DataReader的缺陷設(shè)計(jì)的,DataReader數(shù)據(jù)處理速度快,但它是只讀的, 而且一旦移到下一行,就不能查看上一行的數(shù)據(jù),DataSet則可以自由移動(dòng)指針。DataSet的數(shù)據(jù)是與數(shù)據(jù)庫(kù)斷開的。DataSet還可用于多層應(yīng)用程序中,如果應(yīng)用程序運(yùn)行在中間層的業(yè)務(wù)對(duì)象中來(lái)訪問(wèn)數(shù)據(jù)庫(kù),則業(yè)務(wù)對(duì)象需將脫機(jī)數(shù)據(jù)結(jié)構(gòu)傳遞給客戶應(yīng)用程序。
DataSet的功能:瀏覽、排序、搜索、過(guò)濾、處理分級(jí)數(shù)據(jù)、緩存更改等。還可以與XML數(shù)據(jù)互換。DataSet中可包括多個(gè)DataTable,可將多個(gè)查詢結(jié)構(gòu)存到一個(gè)DataSet中,方便操作,而DataTable中又包括多個(gè)DataRow、DataColumn,可通過(guò)這些DataRow、DataColumn來(lái)查看、操作其中的數(shù)據(jù),而需將操作結(jié)果返回給數(shù)據(jù)庫(kù)的話,則可以調(diào)用DataAdapter的Update方法。
DataSet的操作:
DataSet ds=new DataSet();
DataTable dt=new DataTable("newTable");
ds.Tables.Add(dt);
DataSet ds=new DataSet();
DataTable dt=ds.Tables.Add("newTable");
上述兩種方法都可以在DataSet中添加一個(gè)DataTable,看需要而進(jìn)行選擇。添加DataTable后,需向其中添加行和列。
DataSet ds=new DataSet();
DataTable dt=ds.Tables.Add("newTables");
DataColumn col=dt.Columns.Add("newColumn",typeof(int));
col.AllowDBNull=false;
col.MaxLength=4;
col.Unique=true;

上述代碼向DataSet中的DataTable中添加名為”newColumn”,類型為int且不為空,最大長(zhǎng)度為4和唯一性為真的列。
 dt.PrimaryKey=new DataColumn[] {dt.Columns["ID"]}
這段代碼是繼續(xù)上面代碼的,為一個(gè)DataTable中添加一個(gè)主鍵列,主鍵列是一個(gè)數(shù)據(jù)組,如有多個(gè)主鍵,只需在數(shù)組中添加一個(gè)列即可。如下:
 dt.PrimaryKey=new DataColumns[] {dt.Columns["OrderID"],dt.Columns["ProductID"]}
添加外鍵:
ForeignKeyConstraint fk;
fk=new ForeignKeyConstraint(ds.Tables["Customers"].Columns["CustomerID"],ds.Tables["Orders"].Columns["CustomerID"]);
ds.Tables["Orders"].Constraints.Add(fk);
//上述代碼假如已經(jīng)為Cusomers表和Orders創(chuàng)建了主鍵,此句為添加外鍵約束。
上述是根據(jù)Customers表和Orders表的CustomerID來(lái)創(chuàng)建約束。
下面介紹修改DataRow中的內(nèi)容:
DataRow dr=ds.Tables["Customer"].Rows.Find("ANTON");
if(dr==null)

else
  {
dr.BeginEdit();
dr["CompanyName"]="newValue";
dr["ContactName"]="newValue2";
dr.EndEdit();
}
//上面代碼通過(guò)Row集合的Find方法來(lái)在DataTable中的行進(jìn)行定位,找到"ANTON"行,再修改"ANTON"行中CompanyName列和ContactName列的值。通過(guò)BeginEdit和EndEdit來(lái)緩存對(duì)行的修改,還可調(diào)用 CancelEdit為取消修改。
判斷某列是否為空值:
DataRow dr=ds.Tables["Customers"].Rows.Find("aaa");
if(dr.IsNull("ContactName");
..
else
dr["ContactName"]=DBNull.Value
//這里判斷ContactName列是否為空,如果不是則為其賦空值,呵,很無(wú)厘頭的做法,這里只為演示為列賦空值的做法。
刪除DataRow:
有兩種方法可以刪除DataRow,Delete方法和Remove方法和RemoveAt方法。其區(qū)別是Delete方法實(shí)際上不是從DataTable中刪除掉一行,而是將其標(biāo)志為刪除,僅僅是做個(gè)記號(hào),而Remove方法則是真正的從DataRow中刪除一行,RemoveAt方法是根本行的索引來(lái)刪除。列:
DataRow dr=ds.Tables["table"].Rows.Find("a");
ds.Tables["table"].Remove(dr);
或
ds.Tables["table"].Remove(index);
//dr 為"a"所在的行,查出后將其刪除,index為 "a"所在的索引號(hào)。
|