淺談DataSet
2024-07-21 02:07:54
供稿:網友
dataset是ado.net開發人員為方便數據處理開發出來的,是數據的集合,是為解決datareader的缺陷設計的,datareader數據處理速度快,但它是只讀的, 而且一旦移到下一行,就不能查看上一行的數據,dataset則可以自由移動指針。dataset的數據是與數據庫斷開的。dataset還可用于多層應用程序中,如果應用程序運行在中間層的業務對象中來訪問數據庫,則業務對象需將脫機數據結構傳遞給客戶應用程序。
dataset的功能:瀏覽、排序、搜索、過濾、處理分級數據、緩存更改等。還可以與xml數據互換。dataset中可包括多個datatable,可將多個查詢結構存到一個dataset中,方便操作,而datatable中又包括多個datarow、datacolumn,可通過這些datarow、datacolumn來查看、操作其中的數據,而需將操作結果返回給數據庫的話,則可以調用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中添加一個datatable,看需要而進行選擇。添加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且不為空,最大長度為4和唯一性為真的列。
dt.primarykey=new datacolumn[]{dt.columns["id"]}
這段代碼是繼續上面代碼的,為一個datatable中添加一個主鍵列,主鍵列是一個數據組,如有多個主鍵,只需在數組中添加一個列即可。如下:
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);
//上述代碼假如已經為cusomers表和orders創建了主鍵,此句為添加外鍵約束。
上述是根據customers表和orders表的customerid來創建約束。
下面介紹修改datarow中的內容:
datarow dr=ds.tables["customer"].rows.find("anton");
if(dr==null)
else
{
dr.beginedit();
dr["companyname"]="newvalue";
dr["contactname"]="newvalue2";
dr.endedit();
}
//上面代碼通過row集合的find方法來在datatable中的行進行定位,找到"anton"行,再修改"anton"行中companyname列和contactname列的值。通過beginedit和endedit來緩存對行的修改,還可調用 canceledit為取消修改。
判斷某列是否為空值:
datarow dr=ds.tables["customers"].rows.find("aaa");
if(dr.isnull("contactname");
..
else
dr["contactname"]=dbnull.value
//這里判斷contactname列是否為空,如果不是則為其賦空值,呵,很無厘頭的做法,這里只為演示為列賦空值的做法。
刪除datarow:
有兩種方法可以刪除datarow,delete方法和remove方法和removeat方法。其區別是delete方法實際上不是從datatable中刪除掉一行,而是將其標志為刪除,僅僅是做個記號,而remove方法則是真正的從datarow中刪除一行,removeat方法是根本行的索引來刪除。列:
datarow dr=ds.tables["table"].rows.find("a");
ds.tables["table"].remove(dr);
或
ds.tables["table"].remove(index);
//dr 為"a"所在的行,查出后將其刪除,index為 "a"所在的索引號。關于dataset中的其用法,參照msdn本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。