版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、DataSet用法詳細、特點介紹1、處理脫機數(shù)據(jù),在多層應用程序中很有用。2、 可以在任何時候查看DataSet中任意行的內(nèi)容,允許修改查詢結果的方法。3、處理分級數(shù)據(jù)4、緩存更改5、XML的完整性:DataSet對象和XML文檔幾乎是可互換的。、使用介紹1、創(chuàng)建DataSet對象:DataSet ds = new DataSet("DataSetName");2、查看調(diào)用SqlDataAda pter.Fill創(chuàng)建的結構da.Fill(ds,"Orders");DataTable tbl = ds.TableO; foreach(DataColumn
2、col in tbl.Columns) Console.WriteLine(col.ColumnName);3、查看SqlDataAdapter返回的數(shù)據(jù) DataRow對象DataTable tbl = ds.Table0;DataRow row = tbl.Row0;Console.WriteLine(ros"OrderlD"); 檢查存儲在 DataRow中的數(shù)據(jù)DataTable tbl = row.Table; foreach(DataColumn col in tbl.Columns) Console.WriteLine(rowcol); 檢查DatTable中
3、的DataRow對象foreach(DataRow row in tbl.Rows) Disp layRow(row);4、校驗DataSet中的數(shù)據(jù) 校驗 DataColu mn 的屬性:Read Only, AllowDBNull,MaxLe ngth,U nique DataTable 對象的 Constrains 集合:UiqueConstraints,Primarykey, ForeignkeyConstraints通常不必刻意去創(chuàng)建ForeignkeyConstraints,因為當在DataSet的兩個DataTable對象之間創(chuàng)建關系時會創(chuàng)建一個。 用SqlDataAdapter
4、.Fill模式來檢索模式信息5、編寫代碼創(chuàng)建 DataTable對象 創(chuàng)建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("Cust
5、omers");DataTable對象只能存在于至多一個DataSet對象中。如果希望將DataTable添加到多個 DataSet中,就必須使用Copy方法或Clone方法。Copy方法創(chuàng)建一個與原 DataTable結構相同并且包含相同 行的新DataTable; Clone方法創(chuàng)建一個與原DataTable結構相同,但沒有包含任何行的新DataTable。 為DataTable添加列DataTable tbl = ds.Tables.Add("Orders");DataColumn col =tbl.Columns.Add("OrderlD&quo
6、t;,t yp eof(int);col.AllowDBNull = false;col.MaxLength = 5;col.Unique = true;tbl. PrimaryKey = new DataColumntbl.Columns"CustomersID"當設置主鍵時, AllowDBNull自動設置為False; 處理自動增量列DataSet ds = new DataSet();DataTable tbl = ds.Tables.Add("Orders");DataColumn col = tbl.Columns.Add("Ord
7、erID",t yp eof(int);col.AutoIncrement = true;col.AutoIncrementSeed = -1;col.AutoIncrementSte p = -1;col.ReadOnly = true;添加基于表達式的列tbl.Columns.Add("ItemTotal",ty peof(Decimal),"Quantity*Unit Price");6、修改DataTable內(nèi)容 添加新DataRowDataRow row = ds.Tables"Customers".NewRow(
8、);row"CustomerlD" = "ALFKI"ds.Tables"Customers".Rows.Add(row);object aValues ="ALFKI","Alfreds","Anders","030-22222"da.Tables"Customers".LoadDataRow(aValues,false); 修改當前行修改行的內(nèi)容逼供內(nèi)不會自動修改數(shù)據(jù)庫中相應的內(nèi)容,對行所做的修改被視為是隨后將使用 SqlDataA
9、dapter對象來提交交給數(shù)據(jù)庫的待定的更改。DataRow rowCustomer;rowCustomer = ds.Tables"Custoemrs".Rows.Find("ANTON");if(rowCustomer = null)/沒有查找客戶elserowCustomer"Co mp anyName" ="NewCo mp anyName"rowCustomer"ContactName" ="NewContactName"/推薦使用這種方式DataRow rowCu
10、stomer;rowCustomer = ds.Tables"Custoemrs".Rows.Find("ANTON");if(rowCustomer = null)/沒有查找客戶elserowCustomer.BeginEdit();rowCustomer"Co mp anyName" ="NewCo mp anyName"rowCustomer"ContactName" - 'NewContactName"rowCustomer.EndEdit();/null表示不修改該列
11、的數(shù)據(jù)obejct aCustomer -null,"NewCom panyName","NewContactName",nullDataRow rowCustomer;rowCustomer - ds.Tables"Customers".Rows.Find("ALFKI");rowCustomer.ltemArray - aCustomer; 處理DataRow的空值/查看是否為空DataRow rowCustomer;rowCustomer - ds.Tables"Customers".Ro
12、ws.Find("ALFKI");if(rowCustomer.lsNull(" Phone")Console.WriteLine("It""s Null");elseConsole.WriteLine("It""s not Null");/賦予空值 rowCustomer" Phone" - DBNull.Value; 刪除DataRowDataRow rowCustomer;rowCustomer - ds.Tables"Customers&
13、quot;.Rows.Find("ALFKI");rowCustomer.Delete(); 清除DataRowDataRow rowCustomer - ds.Tables"Customers".Rows.Find("ALFKI");rowCustomer.ItemArray - aCustomer;da.Tables"Customers".Remove(rowCustomer);或者ds.Tables"Customers".RemoveAt(intlndex); 使用 DataRow.Row
14、State 屬性:Unchanged,Detached,Added,Modified,Deletedp rivate 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.RowS
15、tate);myTable.Rows.Add(myRow);/ New row.Console.WriteLine("AddRow " + myRow.RowState); myTable.Acce ptChanges();/ Unchanged row.Console.WriteLine("Acce ptChanges " + myRow.RowState);myRow"FirstName" = "Scott"/ Modified row.Console.WriteLine("Modified &quo
16、t; + myRow.RowState);myRow.Delete();/ Deleted row.Console.WriteLine("Deleted " + myRow.RowState); 檢查DataRow中的掛起更改DataRow rowCustomer;rowCustomer = ds.Tables"Customers".Rows.Find("ALFKI");rowCustomer"Co mp anyName" = "NewCo mp anyName"string strNewCo
17、mp anyName,strOldCo mp anyName;Console.WriteLine(rowCustomer"Co mp anyName",DataRowVersion.Current);Console.WriteLine(rowCustomer"Co mp anyName",DataRowVersion.Original); 遍歷DataSetforeach(DataTable dt in dataSet.Tables)foreach(DataRow dr in dt.Rows)foreach(DataColumn dc in dr.Tab
18、le.Columns)Console.WriteLine(drdc);三、屬性方法事件介紹1、DataSet 屬性CaseSensitive:用于控制DataTable中的字符串比較是否區(qū)分大小寫。"NewDataSet"。如果將DataSetName :當前DataSet的名稱。如果不指定,則該屬性值設置為DataSet內(nèi)容寫入 XML文件,DataSetName是XML文件的根節(jié)點名稱。DesignMode :如果在設計時使用組件中的DataSet, DesignMode返回True,否則返回 False。HasErrors :表示DataSet中的DataRow對象是
19、否包含錯誤。如果將一批更改提交給數(shù)據(jù)庫并將DataAda pter對象的 Contin ueU pdate On Error屬性設置為 True,則在提交更改后必須檢查DataSet的HasErrors屬性,以確定是否有更新失敗。NameSpace和Prefix :指定XML命名空間和前綴Relations :返回一個 DataRelationCollection 對象。Tables:檢查現(xiàn)有的DataTable對象。通過索引訪問 DataTable有更好的性能。 方法AcceptChanges 和 RejectChanges :接受或放棄 DataSet中所有掛起更改。調(diào)用 AcceptCh
20、anges時, RowState屬性值為 Added或Modified的所有行的 RowState屬性都將被設置為 Un Cha nged.任何標記 為Deleted的DataRow對象將從 DataSet中刪除。調(diào)用RejectChanges時,任何標記為 Added的DataRow 對象將會被從 DataSet中刪除,其他修改過的DatRow對象將返回前一狀態(tài)。Clear:清除DataSet中所有DataRow對象。該方法比釋放一個DataSet然后再創(chuàng)建一個相同結構的新DataSet要快。DataSet。使用Clo ne和Copy:使用Co py方法會創(chuàng)建與原 DataSet具有相同結構
21、和相同行的新 Clone方法會創(chuàng)建具有相同結構的新DataSet,但不包含任何行。GetChanges:返回與原 DataSet對象具有相同結構的新 DataSet,并且還包含原 DataSet中所有掛 起更改的行。GetXml和GetXmlSchema :使用GetXml方法得到由DataSet的內(nèi)容與她的架構信息轉(zhuǎn)換為XML格式后的字符串。如果只希望返回架構信息,可以使用GetXmlSchema。DataRow 對象。HasChange :表示DataSet中是否包含掛起更改的Merge :從另一個 DataSet、DataTable或現(xiàn)有DataSet中的一組 DataRow對象載入數(shù)據(jù)
22、。ReadXml 和 WriteXml :使用 ReadXml 方法從文件、TextReader、數(shù)據(jù)流或者 XmlReader 中將 XML 數(shù)據(jù)載入DataSet中。Reset:將DataSet返回為未初始化狀態(tài)。如果想放棄現(xiàn)有DataSet并且開始處理新的 DataSet,使用Reset方法比創(chuàng)建一個DataSet的新實例好。 事件MergeFailed :在DataSet的Merge方法發(fā)生一個異常時觸發(fā)。2、DataTable 屬性 方法 事件ColumnChanged :在列的內(nèi)容被改變之后觸發(fā)ColumnChangding :在列的內(nèi)容被改變之前觸發(fā)RowCha nged,Row
23、Cha ngin g,RowDeleted,RowDeleti ng。3、DataColumn 屬性4、DataRow 屬性HasError :確定行是否包含錯誤。Item :通過指定行的列數(shù),列的名稱或DataColumn對象本身,訪問列的內(nèi)容。ItemArray :獲取或設置行中所有列的值。RowError :返回一個包含行錯誤信息的字符串。RowState :返回DataRowState枚舉中的值來表示行的當前狀態(tài)。Table:返回 DataRow 對象所在的 DataTable。 方法AcceptChanges和RejectChanges :提交和放棄掛起更改。BeginEdit、Ca
24、ncelEdit、EndEditClearErrors :清除DataRow中所有的錯誤。對象的Delete方法時,ADO.NET 來刪除其在數(shù)據(jù)庫中對應的行。如果希望徹底刪除 DataRow,以使用DataRowCollection對象的 dataset ds =new datast(); datatable tel =new datatable(); ds.tables.add(tel);string code=ds.tables"te門.rows00.tostnng();Delete:Delete方法實際上并不從DataRow表的Row集合中刪除該 DataRow。當調(diào)用 Da
25、taRow將該行標記為刪除,之后調(diào)用SqlDataAda pter對象的Up date方法 可以調(diào)用Delete方法,接著再調(diào)用它的 AccepteChanges方法,還可Remove方法完成相同的任務。淺談DataSet的用法DataSet是ADO.NET開發(fā)人員為方便數(shù)據(jù)處理開發(fā)出來的,是數(shù)據(jù)的集合,是為解決DataReader的缺陷設計的,DataReader數(shù)據(jù)處理速度快,但它是只讀的,而且一旦移到下一行,就不能查看上 一行的數(shù)據(jù),DataSet則可以自由移動指針。DataSet的數(shù)據(jù)是與數(shù)據(jù)庫斷開的。DataSet還可用于多層應用程序中,如果應用程序運行在中間層的業(yè)務對象中來訪問數(shù)據(jù)
26、庫,則業(yè)務對象需將脫機數(shù)據(jù) 結構傳遞給客戶應用程序。DataSet的功能:瀏覽、排序、搜索、過濾、處理分級數(shù)據(jù)、緩存更改等。還可以與XML數(shù)據(jù) 互換。DataSet中可包括多個 DataTable,可將多個查詢結構存到一個DataSet中,方便操作,而DataTable中又包括多個 DataRow、DataColumn,可通過這些 DataRow、DataColumn來查看、操作其中的數(shù) 據(jù),而需將操作結果返回給數(shù)據(jù)庫的話,則可以調(diào)用DataAda pter的Up date方法。DataSet的操作:DataSet ds=new DataSet();DataTable dt=new DataT
27、able("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("newCo
28、lumn",ty peof(int); col.AllowDBNull=false;col.MaxLength=4;col.Unique=true;上述代碼向DataSet中的DataTable中添加名為” newColumn",類型為int且不為空,最大長度為4和唯 一性為真的列。dt. PrimaryKey=new DataColumndt.Columns"ID"這段代碼是繼續(xù)上面代碼的,為一個DataTable中添加一個主鍵列,主鍵列是一個數(shù)據(jù)組,如有多個主鍵, 只需在數(shù)組中添加一個列即可。如下:dt. PnmaryKey=newDataColum
29、nsdt.Columns"OrderlD",dt.Columns "P roductID" 添加外鍵:ForeignKeyConstraint fk;fk=newForeignKeyConstraint(ds.Tables"Customers".Columns"CustomerlD",ds.Tab les"Orders".Columns"CustomerlD");ds.Tables"Orders".Constraints.Add(fk);上述代碼假如已經(jīng)為
30、 Cusomers表和Orders創(chuàng)建了主鍵,此句為添加外鍵約束。 上述是根據(jù) Customers表和Orders表的CustomerID來創(chuàng)建約束。 下面介紹修改 DataRow中的內(nèi)容:DataRow dr=ds.Tables"Customer".Rows.Find("ANTON");if(dr=null)elsedr.BeginEdit();dr"Com panyName"="newValue"dr"ContactName"="newValue2"dr.EndEditO
31、;上面代碼通過 Row集合的Find方法來在DataTable中的行進行定位,找到"ANTOM行,再修改"ANTON行中CompanyNam列和ContactName列的值。通過 BeginEdit和EndEdit來緩存對行的修改,還可調(diào)用CancelEdit為取消修改。判斷某列是否為空值:DataRow dr=ds.Tables"Customers".Rows.Find("aaa");if(dr.lsNull("ContactName");elsedr"ContactName"=DBNull.
32、Value這里判斷ContactName列是否為空,如果不是則為其賦空值,呵,很無厘頭的做法,這里只為演示為列賦 空值的做法。刪除 DataRow:有兩種方法可以刪除 DataRow,Delete方法和 Remove方法和 RemoveAt方法。其區(qū)別是 Delete 方法實際上不是從 DataTable中刪除掉一行,而是將其標志為刪除,僅僅是做個記號,而Remove方法則是真正的從 DataRow中刪除一行,RemoveAt方法是根本行的索引來刪除。列:DataRow dr=ds.Tables"table".Rows.Find("a");ds.Tabl
33、es"table".Remove(dr);ds.Tables"table".Remove(index);dr為"a"所在的行,查出后將其刪除,index為"a"所在的索引號。關于 DataSet中的其用法,參照 MSDNDataRow dr=ds.Tables"Customers".Rows.Find("aaa");if(dr.IsNull("ContactName");elsedr"ContactName"=DBNull.Value這
34、里判斷ContactName列是否為空,如果不是則為其賦空值,呵,很無厘頭的做法,這里只為演示為列賦空值的做法。using System.Data;using System;using System.Windows.Forms;class DataTstatic DataTable dt;/ = new DataTable();static DataSet ds;static void method1()dt = new DataTable("Name");ds = new DataSet();dt.Columns.Add(new DataColumn("ID", typ eof(lnt32);dt.Columns.Add(new DataColumn("Name", ty peof(string);dt.Columns.Add(new DataColumn("Sex", ty peof(string);dt.Columns.Add(new DataColumn("Addr", typ eof(string); static void add(int id,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 產(chǎn)品保修合同
- 大型美食城招商合同范本
- 商住樓物業(yè)管理合同
- 汽車維修合同書范本
- 鍋爐工合同書
- 我要出租房屋租賃合同范本
- 室內(nèi)場景識別定位約束條件下的手機實例化AR方法研究
- 2025年外研版三年級起點七年級歷史下冊階段測試試卷含答案
- 2025年浙教新版九年級歷史下冊階段測試試卷含答案
- 2025年粵人版選修二地理上冊階段測試試卷
- 籃球俱樂部合伙協(xié)議
- 電力基建復工安全教育培訓
- 2018注冊環(huán)保工程師考試公共基礎真題及答案
- 勞務經(jīng)紀人培訓
- 如何提高售后服務的快速響應能力
- 成人氧氣吸入療法-中華護理學會團體標準
- Unit-3-Reading-and-thinking課文詳解課件-高中英語人教版必修第二冊
- 高數(shù)(大一上)期末試題及答案
- 婚介公司紅娘管理制度
- 煤礦電氣試驗規(guī)程
- 物業(yè)客服培訓課件PPT模板
評論
0/150
提交評論