麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > .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方法完成相同的任務。

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 伊人久久国产精品 | 毛片网站网址 | 久久久久99999 | 99精品国产在热久久婷婷 | 国产精品成人一区二区三区电影毛片 | 色妞妞视频 | 好吊色欧美一区二区三区四区 | 九色免费视频 | www.guochanav.com| 中文字幕一区二区三区久久 | 国产精品视频免费网站 | 免费久久精品 | 国产一区二区三区手机在线 | 7777视频| av噜噜在线 | 欧美成人一区二区三区电影 | va免费视频 | 久久国产精品久久久久久 | 免费看一级片 | 天天干导航 | 国内精品久久久久久久星辰影视 | 一级成人欧美一区在线观看 | 神马久久精品综合 | 亚洲成人免费网站 | 久草在线精品观看 | 日韩视频区 | 欧美三级美国一级 | 亚洲电影在线播放 | 第四色成人网 | 九色中文 | 欧美一级二级毛片视频 | 亚洲第一色片 | 久久久久久久高清 | 欧美成年性h版影视中文字幕 | 久久久精品综合 | 91精品免费观看 | chinese xvideos gay| 精品99在线视频 | 精品一区二区三区免费 | 国产福利视频 | 91成人免费网站 |