亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

ADO.NET讀書筆記系列之------DataSet對象

2024-07-21 02:06:30
字體:
來源:轉載
供稿:網友

一、特點介紹

1、處理脫機數據,在多層應用程序中很有用。

2、可以在任何時候查看dataset中任意行的內容,允許修改查詢結果的方法。

3、處理分級數據

4、緩存更改

5、xml的完整性:dataset對象和xml文檔幾乎是可互換的。

二、使用介紹

1、創建dataset對象:dataset ds = new dataset("datasetname");

2、查看調用sqldataadapter.fill創建的結構

    da.fill(ds,"orders");

    datatable tbl = ds.table[0];

    foreach(datacolumn col in tbl.columns)

        console.writeline(col.columnname);

3、查看sqldataadapter返回的數據

①、datarow對象

    datatable tbl = ds.table[0];

    datarow row = tbl.row[0];

    console.writeline(ros["orderid"]);

②、檢查存儲在datarow中的數據

    datatable tbl = row.table;

    foreach(datacolumn col in tbl.columns)

        console.writeline(row[col]);

③、檢查dattable中的datarow對象

            foreach(datarow row in tbl.rows)

                displayrow(row);

4、校驗dataset中的數據

①、校驗datacolumn的屬性:readonly,allowdbnull,maxlength,unique

②、datatable對象的constrains集合:uiqueconstraints,primarykey,foreignkeyconstraints

通常不必刻意去創建foreignkeyconstraints,因為當在dataset的兩個datatable對象之間創建關系時會創建一個。

③、用sqldataadapter.fill模式來檢索模式信息

5、編寫代碼創建datatable對象

①、創建datatable對象:datatable tbl = new datatable("tablename");

②、將datatable添加到dataset對象的table集合

    dataset ds = new dataset();

    datatable tbl = new datatable("customers");

    ds.tables.add(tbl);

 

    dataset ds = new dataset();

    datatable tbl = ds.tables.add("customers");

 datatable對象只能存在于至多一個dataset對象中。如果希望將datatable添加到多個dataset中,就必須使用copy方法或clone方法。copy方法創建一個與原datatable結構相同并且包含相同行的新datatable;clone方法創建一個與原datatable結構相同,但沒有包含任何行的新datatable。

③、為datatable添加列

    datatable tbl = ds.tables.add("orders");

    datacolumn col =tbl.columns.add("orderid",typeof(int));

    col.allowdbnull = false;

    col.maxlength = 5;

    col.unique = true;

    tbl.primarykey = new datacolumn[]{tbl.columns["customersid"]};

    當設置主鍵時,allowdbnull自動設置為false;

④、處理自動增量列

    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");

6、修改datatable內容

①、添加新datarow

    datarow row = ds.tables["customers"].newrow();

    row["customerid"] = "alfki";

    ds.tables["customers"].rows.add(row);

 

    object[] avalues ={"alfki","alfreds","anders","030-22222"};

    da.tables["customers"].loaddatarow(avalues,false);

②、修改當前行

    修改行的內容逼供內不會自動修改數據庫中相應的內容,對行所做的修改被視為是隨后將使用sqldataadapter對象來提交交給數據庫的待定的更改。

    datarow rowcustomer;

    rowcustomer = ds.tables["custoemrs"].rows.find("anton");

    if(rowcustomer == null)

        //沒有查找客戶

    else

    {

        rowcustomer["companyname"] ="newcompanyname";       

        rowcustomer["contactname"] ="newcontactname";

    }

 

    //推薦使用這種方式

    datarow rowcustomer;

    rowcustomer = ds.tables["custoemrs"].rows.find("anton");

    if(rowcustomer == null)

        //沒有查找客戶

    else

    {

        rowcustomer.beginedit();

        rowcustomer["companyname"] ="newcompanyname";       

        rowcustomer["contactname"] ="newcontactname";

        rowcustomer.endedit();

    }

 

    //null表示不修改該列的數據

    obejct[] acustomer ={null,"newcompanyname","newcontactname",null}

    datarow rowcustomer;

    rowcustomer = ds.tables["customers"].rows.find("alfki");

    rowcustomer.itemarray = acustomer;

③、處理datarow的空值

    //查看是否為空

    datarow rowcustomer;

    rowcustomer = ds.tables["customers"].rows.find("alfki");

    if(rowcustomer.isnull("phone"))

        console.writeline("it's null");

    else

        console.writeline("it's not null");

 

    //賦予空值

    rowcustomer["phone"] = dbnull.value;

④、刪除datarow

    datarow rowcustomer;

    rowcustomer = ds.tables["customers"].rows.find("alfki");

    rowcustomer.delete();

⑤、清除datarow

    datarow rowcustomer = ds.tables["customers"].rows.find("alfki");

    rowcustomer.itemarray = acustomer;

    da.tables["customers"].remove(rowcustomer);

    或者

    ds.tables["customers"].removeat(intindex);

⑥、使用datarow.rowstate屬性 :unchanged,detached,added,modified,deleted

private void demonstraterowstate()

{
// run a function to create a datatable with one column.
datatable mytable = maketable();
datarow myrow;

// create a new datarow.
myrow = mytable.newrow();
// detached row.
console.writeline("new row " + myrow.rowstate);

mytable.rows.add(myrow);
// new row.
console.writeline("addrow " + myrow.rowstate);

mytable.acceptchanges();
// unchanged row.
console.writeline("acceptchanges " + myrow.rowstate);

myrow["firstname"] = "scott";
// modified row.
console.writeline("modified " + myrow.rowstate);

myrow.delete();
// deleted row.
console.writeline("deleted " + myrow.rowstate);
}

⑦、檢查datarow中的掛起更改

    datarow rowcustomer;

    rowcustomer = ds.tables["customers"].rows.find("alfki");

    rowcustomer["companyname"] = "newcompanyname";

    string strnewcompanyname,stroldcompanyname;

    console.writeline(rowcustomer["companyname",datarowversion.current]);   

    console.writeline(rowcustomer["companyname",datarowversion.original]);

三、屬性方法事件介紹

1、dataset

①、屬性

    casesensitive:用于控制datatable中的字符串比較是否區分大小寫。

    datasetname:當前dataset的名稱。如果不指定,則該屬性值設置為"newdataset"。如果將dataset內容寫入xml文件,datasetname是xml文件的根節點名稱。

    designmode:如果在設計時使用組件中的dataset,designmode返回true,否則返回false。

    haserrors:表示dataset中的datarow對象是否包含錯誤。如果將一批更改提交給數據庫并將dataadapter對象的continueupdateonerror屬性設置為true,則在提交更改后必須檢查dataset的haserrors屬性,以確定是否有更新失敗。

    namespace和prefix:指定xml命名空間和前綴

    relations:返回一個datarelationcollection對象。

    tables:檢查現有的datatable對象。通過索引訪問datatable有更好的性能。

②、方法

    acceptchanges和rejectchanges:接受或放棄dataset中所有掛起更改。調用acceptchanges時,rowstate屬性值為added或modified的所有行的rowstate屬性都將被設置為unchanged.任何標記為deleted的datarow對象將從dataset中刪除。調用rejectchanges時,任何標記為added的datarow對象將會被從dataset中刪除,其他修改過的datrow對象將返回前一狀態。

    clear:清除dataset中所有datarow對象。該方法比釋放一個dataset然后再創建一個相同結構的新dataset要快。

    clone和copy:使用copy方法會創建與原dataset具有相同結構和相同行的新dataset。使用clone方法會創建具有相同結構的新dataset,但不包含任何行。

    getchanges:返回與原dataset對象具有相同結構的新dataset,并且還包含原dataset中所有掛起更改的行。

    getxml和getxmlschema:使用getxml方法得到由dataset的內容與她的架構信息轉換為xml格式后的字符串。如果只希望返回架構信息,可以使用getxmlschema。

    haschange:表示dataset中是否包含掛起更改的datarow對象。

    merge:從另一個dataset、datatable或現有dataset中的一組datarow對象載入數據。

    readxml和writexml:使用readxml方法從文件、textreader、數據流或者xmlreader中將xml數據載入dataset中。

    reset:將dataset返回為未初始化狀態。如果想放棄現有dataset并且開始處理新的dataset,使用reset方法比創建一個dataset的新實例好。

③、事件

    mergefailed:在dataset的merge方法發生一個異常時觸發。

2、datatable

①、屬性

②、方法

③、事件

    columnchanged:在列的內容被改變之后觸發

    columnchangding:在列的內容被改變之前觸發

    rowchanged,rowchanging,rowdeleted,rowdeleting。

3、datacolumn

①、屬性

4、datarow

①、屬性

    haserror:確定行是否包含錯誤。

    item:通過指定行的列數,列的名稱或datacolumn對象本身,訪問列的內容。

    itemarray:獲取或設置行中所有列的值。

    rowerror:返回一個包含行錯誤信息的字符串。

    rowstate:返回datarowstate枚舉中的值來表示行的當前狀態。

    table:返回datarow對象所在的datatable。

②、方法

    acceptchanges和rejectchanges:提交和放棄掛起更改。

    beginedit、canceledit、endedit

    clearerrors:清除datarow中所有的錯誤。

    delete:delete方法實際上并不從datarow表的row集合中刪除該datarow。當調用datarow對象的delete方法時,ado.net將該行標記為刪除,之后調用sqldataadapter對象的update方法來刪除其在數據庫中對應的行。

    如果希望徹底刪除datarow,可以調用delete方法,接著再調用它的acceptechanges方法,還可以使用datarowcollection對象的remove方法完成相同的任務。

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久热精品视频在线| 国产精品丝袜久久久久久高清| 国产一区二区日韩| 韩国三级日本三级少妇99| 亚洲精品久久久久久久久| 久久久精品美女| 狠狠干狠狠久久| 97视频com| 国产成人综合久久| 国产精品三级久久久久久电影| 日韩激情片免费| 高清欧美一区二区三区| 欧美日韩国产页| 精品国产福利在线| 亚洲免费视频一区二区| 国产精品永久免费观看| 国产精品久久久久久久久| 久久天天躁狠狠躁老女人| 日韩欧美精品在线观看| 欧美大片在线看免费观看| 欧美在线精品免播放器视频| 色妞在线综合亚洲欧美| 国产成人精品视频在线观看| 2019精品视频| 欧美另类99xxxxx| 中文字幕亚洲欧美日韩高清| 国产免费一区二区三区香蕉精| 欧美性xxxxxxxxx| 国产精品久久久久久久午夜| 亚洲一级黄色片| 国产日韩中文字幕在线| 国产精品www网站| 国产精品第一第二| 日韩av日韩在线观看| 日韩在线视频观看正片免费网站| 97国产精品久久| 精品成人av一区| 欧美精品在线免费| 亚洲精品福利在线| 992tv成人免费影院| 992tv成人免费影院| 久久久欧美精品| 这里只有精品在线观看| 久久男人资源视频| 久久久在线视频| 亚洲精品日韩欧美| 久久久女女女女999久久| 韩国三级电影久久久久久| 欧美性视频精品| 欧美伊久线香蕉线新在线| 国产精品99蜜臀久久不卡二区| 国语自产精品视频在线看| 日韩精品免费综合视频在线播放| 国产精品色婷婷视频| 久久福利视频网| 亚洲伊人久久综合| 亚洲自拍偷拍色片视频| 中文字幕成人在线| 成人444kkkk在线观看| 欧洲日韩成人av| 国语对白做受69| 亚洲成人网久久久| 一区二区在线免费视频| 日本精品视频网站| 日韩最新av在线| 日韩av大片免费看| 亚洲欧美综合区自拍另类| 日韩精品在线视频| 日本19禁啪啪免费观看www| 91黑丝高跟在线| 欧美与黑人午夜性猛交久久久| 亚洲欧美成人一区二区在线电影| 国产999在线| 亚洲一区二区福利| 久久久久一本一区二区青青蜜月| 久久夜精品va视频免费观看| 精品久久久久久国产91| 91国产在线精品| 国产精品欧美风情| 国产成人综合精品在线| 久久伊人色综合| 成人日韩在线电影| 日本最新高清不卡中文字幕| 日韩高清中文字幕| 久久综合电影一区| 欧美日产国产成人免费图片| 亚洲成年人在线| 中文字幕在线看视频国产欧美在线看完整| 在线播放精品一区二区三区| 亚洲成av人乱码色午夜| 亚洲第一精品夜夜躁人人爽| 国产精品自产拍高潮在线观看| 欧美午夜片在线免费观看| 亚洲欧美中文日韩在线| 一区二区亚洲欧洲国产日韩| 美女国内精品自产拍在线播放| 国产成人福利视频| 黄色成人av网| 成人在线小视频| 国产精品十八以下禁看| 51色欧美片视频在线观看| 欧美日韩成人黄色| 夜夜嗨av一区二区三区免费区| 日韩欧美中文在线| 国产亚洲欧美另类中文| 亚洲**2019国产| 日本精品久久中文字幕佐佐木| 国模吧一区二区三区| 欧美亚洲另类激情另类| 91免费欧美精品| 91沈先生在线观看| 国产精品免费视频xxxx| 欧美人在线观看| 成人h视频在线| 日韩欧美中文字幕在线播放| 91亚洲精品视频| 国产日韩欧美夫妻视频在线观看| 91av视频在线播放| 狠狠躁18三区二区一区| 欧美日韩在线视频一区| 亚洲日本中文字幕免费在线不卡| 久久夜精品va视频免费观看| 成人做爰www免费看视频网站| 伊人久久免费视频| 亚洲最大激情中文字幕| 日韩电影中文字幕av| 3344国产精品免费看| 成人av番号网| 亚洲欧美国产精品va在线观看| 国产精品成人免费电影| 国产热re99久久6国产精品| 国产精品精品久久久久久| 国产偷国产偷亚洲清高网站| 国产成人在线播放| 日本中文字幕久久看| 欧美黄色片在线观看| 欧美性高潮床叫视频| 国产精品久久久久久久一区探花| 日韩在线视频观看| 亚洲国产又黄又爽女人高潮的| 国产成人午夜视频网址| 亚洲国产精品高清久久久| 日韩网站在线观看| 亚洲天堂免费视频| 91麻豆桃色免费看| 欧美视频国产精品| 欧美在线视频观看| 这里只有精品在线播放| 操日韩av在线电影| 国产精品视频一区国模私拍| 亚洲视频一区二区三区| 欧美成人三级视频网站| 亚洲国产成人一区| 国产成人综合亚洲| 日日骚av一区| 午夜剧场成人观在线视频免费观看| 欧美极品在线播放| 在线一区二区日韩| 亚洲二区在线播放视频| 亚洲97在线观看| 国产精品美女网站| 97人洗澡人人免费公开视频碰碰碰| 福利精品视频在线| 午夜精品久久久久久久久久久久久|