第5章 數(shù)據(jù)集DataSet_第1頁
第5章 數(shù)據(jù)集DataSet_第2頁
第5章 數(shù)據(jù)集DataSet_第3頁
第5章 數(shù)據(jù)集DataSet_第4頁
第5章 數(shù)據(jù)集DataSet_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、目錄5.1非連接模型的案例5.2DataSet對(duì)象模型5.3關(guān)系數(shù)據(jù)5.4綜合運(yùn)用5.5強(qiáng)類型DataSet5.6小結(jié)第第5章數(shù)據(jù)集章數(shù)據(jù)集DataSet5.1非連接模型的案例ADO.NET中的數(shù)據(jù)訪問模型可以分成兩種:連接模型和非連接模型。在連接模型中,.NET數(shù)據(jù)提供程序連接到數(shù)據(jù)源以后,才能對(duì)數(shù)據(jù)源的數(shù)據(jù)進(jìn)行數(shù)據(jù)處理,在這個(gè)過程中一直要保持連接狀態(tài),數(shù)據(jù)處理完成后斷開與數(shù)據(jù)源的連接。在非連接模型中,通過.NET數(shù)據(jù)提供程序連接到數(shù)據(jù)源,并為來自數(shù)據(jù)源的數(shù)據(jù)創(chuàng)建內(nèi)存中的緩存,這是可以斷開數(shù)據(jù)源的連接。然后在緩存中實(shí)現(xiàn)數(shù)據(jù)的查詢、修改、刪除的操作,完成后然后再與數(shù)據(jù)源建立連接,將更改的數(shù)據(jù)內(nèi)

2、容合并至數(shù)據(jù)源。在操作數(shù)據(jù)庫的時(shí)候,應(yīng)該盡可能晚地打開連接并且盡可能早地關(guān)閉連接是很重要的,這樣可以更好地利用連接池。相對(duì)于連接模型而言,非連接模型就更好地體現(xiàn)了這個(gè)思想。非連接模型需要緩存數(shù)據(jù),需要一個(gè)對(duì)象保存非連接數(shù)據(jù)。數(shù)據(jù)集DataSet,就是.NET框架自帶的可用于非連接的數(shù)據(jù)緩存。5.2DataSet對(duì)象模型DataSet 是 ADO.NET 結(jié)構(gòu)的主要組件,是專門為獨(dú)立于任何數(shù)據(jù)源的數(shù)據(jù)訪問而設(shè)計(jì)。因此,它可以用于多種不同的數(shù)據(jù)源,用于XML數(shù)據(jù),或用于管理應(yīng)用程序本地的數(shù)據(jù)。數(shù)據(jù)集DataSet,可以認(rèn)為是內(nèi)存中的數(shù)據(jù)庫,DataSet可以是不依賴于任何數(shù)據(jù)庫的獨(dú)立數(shù)據(jù)集合??蛻?/p>

3、端可以通過對(duì)DataSet的數(shù)據(jù)實(shí)現(xiàn)數(shù)據(jù)的查詢、修改、刪除等操作,從而實(shí)現(xiàn)對(duì)數(shù)據(jù)源的同等操作。DataSet支持多表、表間關(guān)系、數(shù)據(jù)約束等,和關(guān)系數(shù)據(jù)庫的模型基本一致。DataSet 由一組數(shù)據(jù)表DataTable 對(duì)象和數(shù)據(jù)關(guān)系DataRelation 對(duì)象組成,可以通過使用唯一鍵約束UniqueConstraint 和外鍵約束ForeignKeyConstraint 對(duì)象在 DataSet 中實(shí)施數(shù)據(jù)完整性約束。5.2DataSet對(duì)象模型5.2DataSet對(duì)象模型DataSet對(duì)象包含一個(gè)類型為DataTableCollection類型的DataTable對(duì)象集合,作為其Tables屬

4、性。它也包含一個(gè)名為Relations的屬性,該屬性是DataRelationCollection類型的DataRelation對(duì)象集合。類似地,DataTable對(duì)象具有一個(gè)名為Columns的屬性,是DataColumn對(duì)象集合,其表現(xiàn)形式是DataColumnCollection對(duì)象。它也包含一個(gè)DataRowCollection類型的屬性,名為Rows,以DataRows對(duì)象的形式表示各行記錄??梢栽贒ataTable上定義約束(比如UniqueConstraint),這是一個(gè)表現(xiàn)為Constraints屬性的集合,其類型為ConstraintCollection,可以賦值為一組Con

5、straint類型的對(duì)象,或是從Constraint對(duì)象繼承而來的對(duì)象。DataSet對(duì)象的屬性屬性名稱數(shù)據(jù)類型說明CassSensitiveBoolean指示DataSet對(duì)象中的字符串比較是否區(qū)分大小寫DataSetNameStringDataSet對(duì)象的名稱DefaultViewManagerDefaultViewManagerDataSet對(duì)象所包含的數(shù)據(jù)的自定義視圖,以允許使用自定義的DataViewManager對(duì)象進(jìn)行篩選、搜索和導(dǎo)航EnforceConstraintsBoolean指示在嘗試執(zhí)行任何更新操作時(shí)是否遵循約束規(guī)則ExtendedPropertiesPropertyC

6、ollection用戶自定義信息的集合HasErrorsBoolean所有DataTable對(duì)象中是否存在錯(cuò)誤LocaleCultureInfo用于比較表中字符串的區(qū)域設(shè)置信息PrefixString一個(gè)XML前綴,該前綴是DataSet的命名空間的別名RelationsDataRelationCollectionDataSet對(duì)象中的數(shù)據(jù)關(guān)系的集合TablesDataTableCollectionDataSet對(duì)象中的數(shù)據(jù)表的集合DataSet對(duì)象的方法方法名稱返回類型說明AcceptChangevoid提交自加載此DataSet對(duì)象以后或最后一次調(diào)用AcceptChanges()方法以后對(duì)

7、DataSet對(duì)象進(jìn)行的所有更改Clearvoid通過移除所有表中的所有行來清除任何數(shù)據(jù)的DataSetCloneDataSet復(fù)制DataSet的結(jié)構(gòu),包括所有DataTable架構(gòu)、關(guān)系和約束。不要復(fù)制任何數(shù)據(jù)。CopyDataSet復(fù)制該DataSet對(duì)象的結(jié)構(gòu)和數(shù)據(jù)GetChangesDataSet獲取DataSet對(duì)象的副本,該副本包含自上次加載以來或自調(diào)用AcceptChanges()方法以來對(duì)該數(shù)據(jù)集進(jìn)行的所有更改GetXmlString返回存儲(chǔ)在DataSet對(duì)象中的數(shù)據(jù)的XML表示形式GetXmlSchemaString返回存儲(chǔ)在DataSet對(duì)象中的數(shù)據(jù)的XML表示形式的X

8、SD架構(gòu)HasChangesBoolean獲取一個(gè)值,該值指示DataSet對(duì)象是否有更改,包括新增行、已刪除的行或已修改的行Mergevoid將指定的DataSet、DataTable或DataRow對(duì)象的數(shù)組合并到當(dāng)前的DataSet或DataTable對(duì)象中ReadXmlXmlReadMode將XML架構(gòu)和數(shù)據(jù)讀入DataSet對(duì)象ReadXmlSchemavoid將XML架構(gòu)讀入DataSet對(duì)象RejectChangesvoid取消自從創(chuàng)建DataSet對(duì)象以來或自上次調(diào)用AcceptChanges()方法以來對(duì)DataSet對(duì)象進(jìn)行的所有更改Resetvoid將DataSet對(duì)象重

9、置為其初始狀態(tài)。子類應(yīng)重寫Reset對(duì)象,以便將DataSet對(duì)象還原到其原始狀態(tài)WriteXmlvoid方法用于從DataSet對(duì)象寫XML數(shù)據(jù),還可以選擇寫架構(gòu)WriteXmlSchemavoid寫XML架構(gòu)形式的DataSet結(jié)構(gòu)5.2DataSet對(duì)象模型創(chuàng)建DataSet 對(duì)象實(shí)例:1.使用Microsoft Visual Studio 2010創(chuàng)建DataSet實(shí)例2.編程方式實(shí)現(xiàn)創(chuàng)建DataSet實(shí)例:(1)初始化DataSet類的新實(shí)例。 DataSet ds = new DataSet();(2)用給定名稱初始化DataSet類的新實(shí)例。 DataSet FastFoodDS

10、 = new DataSet(FastFood);DataTableDataTable 類是 .NET Framework 類庫中 System.Data 命名空間的成員。您可以獨(dú)立創(chuàng)建和使用 DataTable,也可以作為 DataSet 的成員創(chuàng)建和使用。每一個(gè)DataSet都是一個(gè)或多個(gè)DataTable 對(duì)象的集合(DataTable相當(dāng)于數(shù)據(jù)庫中的表),這些對(duì)象由數(shù)據(jù)行(DataRow)、數(shù)據(jù)列(DataColumn)、字段名(Column Name)、數(shù)據(jù)格(Item),以及約束(Constraint)和有關(guān)DataTable對(duì)象中數(shù)據(jù)的關(guān)系(Relations)與數(shù)據(jù)顯示排序(D

11、ataView)信息組成。DataTable對(duì)象的屬性屬性名稱屬性名稱數(shù)據(jù)類型數(shù)據(jù)類型說明說明CaseSensitiveBoolean指示表中的字符串比較是否區(qū)分大小寫。指示表中的字符串比較是否區(qū)分大小寫。ChildRelationsDataRelationCollection 獲取此獲取此 Dateable 的子關(guān)系的集合。的子關(guān)系的集合。ColumnsDataColumnCollection獲取屬于該表的列的集合。獲取屬于該表的列的集合。ConstraintsConstraintCollection獲取由該表維護(hù)的約束的集合。獲取由該表維護(hù)的約束的集合。DataSetDataSet獲取此表

12、所屬的獲取此表所屬的 DataSet。DefaultViewDataView獲取可能包括篩選視圖或游標(biāo)位置的表的自定義視圖。獲取可能包括篩選視圖或游標(biāo)位置的表的自定義視圖。ExtendedProperties PropertyCollection獲取自定義用戶信息的集合。獲取自定義用戶信息的集合。HasErrorsBoolean獲取一個(gè)值,該值指示該表所屬的獲取一個(gè)值,該值指示該表所屬的 DataSet 的任何表的任何表的任何行中是否有錯(cuò)誤。的任何行中是否有錯(cuò)誤。LocaleCultureInfo獲取或設(shè)置用于比較表中字符串的區(qū)域設(shè)置信息。獲取或設(shè)置用于比較表中字符串的區(qū)域設(shè)置信息。Minim

13、umCapacityInteger獲取或設(shè)置該表最初的起始大小。獲取或設(shè)置該表最初的起始大小。NamespaceString獲取或設(shè)置獲取或設(shè)置 DataTable 中所存儲(chǔ)數(shù)據(jù)的中所存儲(chǔ)數(shù)據(jù)的 XML 表示形表示形式的命名空間。式的命名空間。ParentRelationsDataRelationCollection 獲取該獲取該 DataTable 的父關(guān)系的集合。的父關(guān)系的集合。PrefixString獲取或設(shè)置獲取或設(shè)置 DataTable 中所存儲(chǔ)數(shù)據(jù)的中所存儲(chǔ)數(shù)據(jù)的 XML 表示形表示形式的命名空間。式的命名空間。PrimaryKeyDataColumn獲取或設(shè)置充當(dāng)數(shù)據(jù)表主鍵的列的

14、數(shù)組。獲取或設(shè)置充當(dāng)數(shù)據(jù)表主鍵的列的數(shù)組。RowsDataRowCollection獲取屬于該表的行的集合。獲取屬于該表的行的集合。TableNameString獲取或設(shè)置獲取或設(shè)置 DataTable 的名稱。的名稱。DataTable對(duì)象的方法方法名稱方法名稱返回值類型返回值類型說明說明AcceptChanges void 提 交 加 載提 交 加 載 D a t a Ta b l e 對(duì) 象 以 后 或 最 后 一 次 調(diào) 用對(duì) 象 以 后 或 最 后 一 次 調(diào) 用AcceptChanges()方法以后對(duì)方法以后對(duì)DataTable對(duì)象進(jìn)行的所有更改對(duì)象進(jìn)行的所有更改Clearvoid

15、刪除刪除DataTable對(duì)象中所有表格的所有行對(duì)象中所有表格的所有行Clone DataTable復(fù)制復(fù)制DataTable對(duì)象的結(jié)構(gòu),包括對(duì)象的結(jié)構(gòu),包括DataTable架構(gòu)、關(guān)系和架構(gòu)、關(guān)系和約束并返回。不復(fù)制任何數(shù)據(jù)。約束并返回。不復(fù)制任何數(shù)據(jù)。ComputeObject計(jì)算當(dāng)前行中通過過濾條件的指定表達(dá)式。計(jì)算當(dāng)前行中通過過濾條件的指定表達(dá)式。 GetChanges DataTable重載,取得上次裝入重載,取得上次裝入DataTable對(duì)象以后或最后一次調(diào)用對(duì)象以后或最后一次調(diào)用AcceptChanges()方法以后方法以后DataTable對(duì)的拷貝。對(duì)的拷貝。 GetError

16、 DataRow重載,取得發(fā)生錯(cuò)誤的所有重載,取得發(fā)生錯(cuò)誤的所有DataRow對(duì)象的拷貝。對(duì)象的拷貝。 LoadDataRow DataRow尋找和更新指定的尋找和更新指定的DtatRow對(duì)象。對(duì)象。 如果找不到匹配的如果找不到匹配的DtatRow對(duì)象,則用指定的指生成新行。對(duì)象,則用指定的指生成新行。NewRow DataRow在在DataTable中生成新的中生成新的DtatRow對(duì)象。對(duì)象。 RejectChanges void取 消 加 載取 消 加 載 D a t a Ta b l e 對(duì) 象 以 后 或 最 后 一 次 調(diào) 用對(duì) 象 以 后 或 最 后 一 次 調(diào) 用AcceptC

17、hanges()方法以后對(duì)方法以后對(duì)DataTable對(duì)象進(jìn)行的所有更改對(duì)象進(jìn)行的所有更改SelectDataRow重載,返回重載,返回 DataTable 中匹配指定過濾字符串的中匹配指定過濾字符串的DataRow對(duì)象。也可以傳入一個(gè)字符串,其中包含描述如何排序?qū)ο?。也可以傳入一個(gè)字符串,其中包含描述如何排序DataRow對(duì)象的細(xì)節(jié)。對(duì)象的細(xì)節(jié)。 創(chuàng)建DataTable 對(duì)象實(shí)例1. 使用Microsoft Visual Studio 2010創(chuàng)建DataTable實(shí)例(1)選擇創(chuàng)建的dataset1對(duì)象的Tables屬性右邊的省略號(hào)按鈕,會(huì)彈出一個(gè)表集合編輯器。(2)選擇Add,會(huì)添加一個(gè)

18、名為Table1的表,在右邊的屬性中修改TableName屬性值為Customer,即在dataset1對(duì)象添加了一個(gè)名為Customer的表。具體操作見教材P92。創(chuàng)建DataTable 對(duì)象實(shí)例2編程方式實(shí)現(xiàn)創(chuàng)建DataTable實(shí)例(1)以下示例創(chuàng)建 DataTable 對(duì)象的實(shí)例,并為其指定名稱“Customer”:DataTable customerTable = new DataTable(Customer);DataTable bookingOrderTable = new DataTable(BookingOrder);(2)以下示例創(chuàng)建 DataTable 實(shí)例,將其添加到

19、DataSet 的 Tables 集合中。DataSet fastFoodDS = new DataSet();DataTable customerTable = fastFoodDS.Tables.Add(Customer);DataTable bookingOrderTable = fastFoodDS.Tables.Add(BookingOrder);DataColomn每個(gè)DataTable都有一個(gè)Columns集合,該集合是DataColumn對(duì)象的容器。一個(gè)DataColumn對(duì)象對(duì)應(yīng)表中的一列。DataColumn對(duì)象并非實(shí)際包含存儲(chǔ)在DataTable中的數(shù)據(jù),而是存儲(chǔ)了有關(guān)該

20、列結(jié)構(gòu)的信息。DataColomn對(duì)象的屬性屬性名稱屬性名稱數(shù)據(jù)類型數(shù)據(jù)類型說明說明AllowDBNull Boolean獲取或設(shè)置一個(gè)值獲取或設(shè)置一個(gè)值,該值指示對(duì)于屬于該表的行該值指示對(duì)于屬于該表的行,此列中是否允許空值。此列中是否允許空值。 AutoIncrement Boolean獲取或設(shè)置一個(gè)值,該值指示對(duì)于添加到該表中的新行,列是否將列獲取或設(shè)置一個(gè)值,該值指示對(duì)于添加到該表中的新行,列是否將列的值自動(dòng)遞增。的值自動(dòng)遞增。 AutoIncrementSeed Integer獲取或設(shè)置其獲取或設(shè)置其 AutoIncrement 屬性設(shè)置為屬性設(shè)置為 true 的列的起始值。的列的起始

21、值。 AutoIncrementStep Integer獲取或設(shè)置其獲取或設(shè)置其 AutoIncrement 屬性設(shè)置為屬性設(shè)置為 true 的列使用的增量。的列使用的增量。 Caption String獲取或設(shè)置列的標(biāo)題。獲取或設(shè)置列的標(biāo)題。 ColumnMapping MappingType獲取或設(shè)置列的獲取或設(shè)置列的 MappingType。 ColumnName String獲取或設(shè)置獲取或設(shè)置 DataColumnCollection 中的列的名稱。中的列的名稱。 DataType Type獲取或設(shè)置存儲(chǔ)在列中的數(shù)據(jù)的類型。獲取或設(shè)置存儲(chǔ)在列中的數(shù)據(jù)的類型。 DefaultValue

22、 Object在創(chuàng)建新行時(shí)獲取或設(shè)置列的默認(rèn)值。在創(chuàng)建新行時(shí)獲取或設(shè)置列的默認(rèn)值。 Expression String獲取或設(shè)置表達(dá)式,用于篩選行、計(jì)算列中的值或創(chuàng)建聚合列。獲取或設(shè)置表達(dá)式,用于篩選行、計(jì)算列中的值或創(chuàng)建聚合列。 ExtendedProperties PropertyCollection獲取與獲取與 DataColumn 相關(guān)的自定義用戶信息的集合。相關(guān)的自定義用戶信息的集合。 MaxLength Integer獲取或設(shè)置文本列的最大長度。獲取或設(shè)置文本列的最大長度。 Namespace String獲取或設(shè)置獲取或設(shè)置 DataColumn 的命名空間。的命名空間。 Ord

23、inal Integer獲取列在獲取列在 DataColumnCollection 集合中的位置。集合中的位置。 Prefix String獲取或設(shè)置一個(gè)獲取或設(shè)置一個(gè) XML 前綴,該前綴是前綴,該前綴是 DataTable 的命名空間的別名。的命名空間的別名。 ReadOnly Boolean獲取或設(shè)置一個(gè)值獲取或設(shè)置一個(gè)值,該值指示一旦向表中添加了行該值指示一旦向表中添加了行, 列是否還允許更改。列是否還允許更改。 Table DataTable獲取列所屬的獲取列所屬的 DataTable。 Unique Boolean獲取或設(shè)置一個(gè)值,該值指示列的每一行中的值是否必須是唯一的。獲取或設(shè)

24、置一個(gè)值,該值指示列的每一行中的值是否必須是唯一的。 為DataTable 對(duì)象創(chuàng)建DataColumn集合1使用Microsoft Visual Studio 2010創(chuàng)建DataColumn集合(1)接著上節(jié)創(chuàng)建DataTable的步驟繼續(xù)下去,點(diǎn)擊dataset1對(duì)象的Tables屬性右邊的省略號(hào)按鈕,在彈出的表集合編輯器中選擇Customer表,點(diǎn)擊其Columns屬性右邊的省略號(hào)按鈕,會(huì)彈出一個(gè)列集合編輯器,在這里可以添加DataColumn到Customer表中。(2)選擇Add,會(huì)添加一個(gè)名為Column1的列,在右邊的屬性中修改ColumnName屬性值為CustomerID、

25、修改DataType屬性值為System.Int32、修改AllowDBNulle屬性值為False等等,這時(shí)Customer表就增加了一個(gè)CustomerID列。(3)選擇Add,可以依次為Customer表添加UserName、CompanyName和CompanyAddress列直至該表創(chuàng)建完成。具體操作見教材P94。為DataTable 對(duì)象創(chuàng)建DataColumn集合2編程方式實(shí)現(xiàn)創(chuàng)建DataColumn集合以下程序代碼就是向customerTable的列集合中添加四個(gè)DataColumn:DataSet fastFoodDS = new DataSet();DataTable cu

26、stomerTable = fastFoodDS.Tables.Add(Customer);DataColumn workCol = customerTable.Columns.Add(CustomerID, typeof(Int32);workCol.AllowDBNull = false;workCol.Unique = true;customerTable.Columns.Add(UserName, typeof(String);customerTable.Columns.Add(CompanyName, typeof(String);customerTable.Columns.Add(

27、CompanyAddress , typeof(String);程序中用于 CustomerID列的屬性設(shè)置為不允許 DBNull 值并將值約束為唯一。為DataTable 對(duì)象創(chuàng)建DataColumn集合2編程方式實(shí)現(xiàn)創(chuàng)建DataColumn集合以下程序代碼是向bookingOrderTable的列集合中添加三個(gè)DataColumn:DataTable bookingOrderTable = fastFoodDS.Tables.Add(BookingOrder);DataColumn col = bookingOrderTable.Columns.Add(OrderID,typeof(int

28、32); bookingOrderTable.Columns.Add(CustomerID , typeof(Int32);bookingOrderTable.Columns.Add(Number, typeof(Int32);DataRowDataRow 和 DataColumn 對(duì)象都是 DataTable 的主要組件。DataColumn 對(duì)象是描述DataTable數(shù)據(jù)結(jié)構(gòu)的,而DataRow 對(duì)象是描述DataTable數(shù)據(jù)內(nèi)容的。DataRow對(duì)象添加在DataTable 的屬性Rows中,屬性Rows 的類型是DataRowCollection。為DataTable創(chuàng)建DataR

29、ow對(duì)象1、 使用 DataTable 對(duì)象的 NewRow 方法創(chuàng)建新的DataRow:DataRow workRow = customerTable.NewRow(); / customerTable結(jié)構(gòu)參考上節(jié)的定義2、使用索引或列名來為新建的行對(duì)象設(shè)置各個(gè)DataColomn值:workRowCustomerID =1001;workRowUserName = 喬峰;或用:workRow1 = 喬峰;3、使用DataTable對(duì)象的Add方法將新的DataRow添加到DataTable 中的Rows屬性中:customerTable.Rows.Add(workRow);為DataTab

30、le創(chuàng)建DataRow對(duì)象也可以通過傳入值的數(shù)組(類型化為Object),調(diào)用 Add 方法來添加新行: customerTable.Rows.Add(new Object 1002, 郭靖);將類型化為 Object 的值的數(shù)組傳遞到 Add 方法,可在表內(nèi)創(chuàng)建新行并將其列值設(shè)置為對(duì)象數(shù)組中的值。請(qǐng)注意,數(shù)組中的值會(huì)根據(jù)它們?cè)诒碇谐霈F(xiàn)的順序相繼與各列匹配。以下代碼段是向customerTable對(duì)象中添加了 10 行數(shù)據(jù):DataRow workRow;for (int i = 0; i = 9; i+) workRow = customerTable.NewRow(); workRow0

31、= i; workRow1 = userName + i.ToString(); customerTable.Rows.Add(workRow);從DataTable中讀取DataRow對(duì)象通過DataTable對(duì)象中的Rows屬性,獲取DataRow對(duì)象集合,通過索引獲得DataRow對(duì)象,然后使用DataRow對(duì)象的Item屬性來讀取該行中任意列的值。由于Item是DataRow類的默認(rèn)屬性,所以可以隱式地使用它。如下面的代碼段就是向控制臺(tái)輸出customerTable對(duì)象第一行第一列(CustomerID)的值:DataRow row;row = customerTable.Rows0;

32、Console.WriteLine(row0);Console.WriteLine(rowCustomerID);Console.WriteLine(rowcustomerTable.ColumnsCustomerID);DataRow對(duì)象的屬性屬性名稱屬性名稱數(shù)據(jù)類型數(shù)據(jù)類型說明說明HasErrors Boolean獲取一個(gè)值,該值指示某行是否包含錯(cuò)誤。獲取一個(gè)值,該值指示某行是否包含錯(cuò)誤。 Item Object已重載。已重載。 獲取或設(shè)置存儲(chǔ)在指定列中的數(shù)據(jù)。獲取或設(shè)置存儲(chǔ)在指定列中的數(shù)據(jù)。 ItemArray Object數(shù)組數(shù)組通過一個(gè)數(shù)組來獲取或設(shè)置此行的所有值。通過一個(gè)數(shù)組來獲取

33、或設(shè)置此行的所有值。 RowError String獲取或設(shè)置行的自定義錯(cuò)誤說明。獲取或設(shè)置行的自定義錯(cuò)誤說明。 RowState DataRowState獲取與該行和獲取與該行和 DataRowCollection 的關(guān)系相關(guān)的關(guān)系相關(guān)的當(dāng)前狀態(tài)。的當(dāng)前狀態(tài)。 DataRow的的RowState屬性(狀態(tài))屬性(狀態(tài))取值有取值有5種:種:Detached、Unchanged、Added、Deleted、ModifiedTable DataTable獲取該行擁有其架構(gòu)的獲取該行擁有其架構(gòu)的 DataTable。 DataRow對(duì)象的方法方法名稱方法名稱返回值類型返回值類型說明說明Accept

34、Changes void提交自上次調(diào)用提交自上次調(diào)用 AcceptChanges 以來對(duì)該行進(jìn)行的所有更改。以來對(duì)該行進(jìn)行的所有更改。 BeginEdit void對(duì)對(duì) DataRow 對(duì)象開始編輯操作。對(duì)象開始編輯操作。 CancelEdit void取消對(duì)該行的當(dāng)前編輯。取消對(duì)該行的當(dāng)前編輯。 ClearErrors void清除行的錯(cuò)誤。這包括清除行的錯(cuò)誤。這包括 RowError 和用和用 SetColumnError 設(shè)設(shè)置的錯(cuò)誤。置的錯(cuò)誤。 Delete void刪除刪除 DataRow。 EndEdit void終止發(fā)生在該行的編輯。終止發(fā)生在該行的編輯。 GetChildRow

35、s DataRow已重載。已重載。 獲取獲取 DataRow 的子行。的子行。 GetColumnError String已重載。已重載。 獲取列的錯(cuò)誤說明。獲取列的錯(cuò)誤說明。 GetColumnsInError DataColumn獲取包含錯(cuò)誤的列的數(shù)組。獲取包含錯(cuò)誤的列的數(shù)組。 GetParentRow DataRow已重載。已重載。 獲取獲取 DataRow 的父行。的父行。 GetParentRows DataRow已重載。已重載。 獲取獲取 DataRow 的父行。的父行。 HasVersion Boolean獲取一個(gè)值,該值指示指定的版本是否存在。獲取一個(gè)值,該值指示指定的版本是否

36、存在。 IsNull Boolean已重載。已重載。獲取一個(gè)值獲取一個(gè)值,該值指示指定的列是否包含空值。該值指示指定的列是否包含空值。 RejectChanges void拒絕自上次調(diào)用拒絕自上次調(diào)用 AcceptChanges 以來對(duì)該行進(jìn)行的所有更改。以來對(duì)該行進(jìn)行的所有更改。 SetAdded void將將 DataRow 的的 Rowstate 更改為更改為 Added。 SetColumnError void已重載。已重載。 為列設(shè)置錯(cuò)誤說明。為列設(shè)置錯(cuò)誤說明。 SetModified void將將 DataRow 的的 Rowstate 更改為更改為 Modified。 SetPa

37、rentRow void已重載。已重載。 設(shè)置設(shè)置 DataRow 的父行。的父行。 設(shè)置主鍵:PrimaryKey屬性數(shù)據(jù)庫表通常都有一列或一組列,用于唯一地標(biāo)識(shí)表中的每一行。這種具有標(biāo)識(shí)作用的列或列組被稱為主鍵(PrimaryKey )。DataTable的PrimaryKey 屬性會(huì)將一個(gè)或多個(gè) DataColumn 對(duì)象的數(shù)組接收為它的值。在將一個(gè)單獨(dú)的 DataColumn 標(biāo)識(shí)為 DataTable 的 PrimaryKey 時(shí),表會(huì)自動(dòng)將列的 AllowDBNull 屬性設(shè)置為 false,并將 Unique 屬性設(shè)置為 true。如果是多列主鍵,則只有 AllowDBNull

38、屬性自動(dòng)設(shè)置為 false。使用Microsoft Visual Studio 2010設(shè)置DataTable的PrimaryKey 屬性字段,打開表集合編輯器,選擇表,然后在屬性窗口中設(shè)置PrimaryKey屬性,具體操作參考教材P97圖5-9。編程實(shí)現(xiàn)對(duì)PrimaryKey 屬性的設(shè)置(1)將單獨(dú)一列定義為主鍵:customerTable.PrimaryKey = new DataColumn customerTable.ColumnsCustomerID;或者寫成:DataColumn myColArray = new DataColumn1;myColArray0 = customer

39、Table.ColumnsCustomerID;customerTable.PrimaryKey = myColArray;()將兩列或多列定義為主鍵“customerTable.PrimaryKey = new DataColumn customerTable.ColumnsUserName, customerTable.ColumnsCompanyName ;或者寫成:DataColumn myKey = new DataColumn2;myKey0 = customerTable.ColumnsUserName;myKey1 = customerTable.ColumnsCompanyN

40、ame;customerTable.PrimaryKey = myKey;表約束ConstraintADO.NET 中DataTable有兩種約束: 唯一約束(UniqueConstraint):確保指定的某列或多個(gè)列中的數(shù)據(jù)組合在同一個(gè)DataTable中的唯一性,防止數(shù)據(jù)冗余。外鍵約束(ForeignKeyConstraint):是DataTable之間的約束規(guī)則。ForeignKeyConstraint 強(qiáng)制了有關(guān)如何對(duì)相關(guān)表所做更新和刪除進(jìn)行傳播的規(guī)則。例如,如果更新或刪除了一個(gè)表格中的某行中的值,并且一個(gè)或多個(gè)相關(guān)的表中也使用了這個(gè)相同的值,F(xiàn)oreignKeyConstraint

41、將會(huì)決定相關(guān)表中發(fā)生的操作。默認(rèn)情況下,通過將 DataRelation 添加至 DataSet 來創(chuàng)建兩張或多張表之間的關(guān)系時(shí),兩種約束都會(huì)自動(dòng)創(chuàng)建。UniqueConstraint對(duì)象的屬性屬性名稱屬性名稱數(shù)據(jù)類型數(shù)據(jù)類型說明說明ColumnsDataColumn對(duì)象數(shù)組對(duì)象數(shù)組返回作為約束中一部分的返回作為約束中一部分的列列ConstraintNameString包含約束的名稱包含約束的名稱ExtendedProperties PropertyCollection包含動(dòng)態(tài)屬性和動(dòng)態(tài)值的包含動(dòng)態(tài)屬性和動(dòng)態(tài)值的集合集合IsPrimaryKeyBoolean表示約束是否是表示約束是否是Data

42、Table的主鍵的主鍵TableDataTable返回約束所屬的返回約束所屬的DataTableUniqueConstraint 對(duì)象下面是幾種創(chuàng)建UniqueConstraint 對(duì)象的方法:(1)使用Microsoft Visual Studio 2010設(shè)置DataTable的Constraints 屬性字段,打開約束集合編輯器,可創(chuàng)建UniqueConstraint 對(duì)象;(2)將DataTable 的某列的Unique 屬性設(shè)置為 true,會(huì)自動(dòng)創(chuàng)建UniqueConstraint 對(duì)象。通過將單列的 Unique 屬性設(shè)置為 false,則相關(guān)的UniqueConstraint對(duì)

43、象也被刪除;(3)當(dāng)設(shè)置DataTable 的 PrimaryKey 時(shí),會(huì)自動(dòng)創(chuàng)建UniqueConstraint 對(duì)象;從 DataTable 的 PrimaryKey 屬性中刪除時(shí),則相關(guān)的UniqueConstraint對(duì)象也被刪除。(4)通過編程使用UniqueConstraint 構(gòu)造函數(shù)創(chuàng)建UniqueConstraint對(duì)象,然后將創(chuàng)建的UniqueConstraint 對(duì)象添加到該表的 Constraints 屬性中。UniqueConstraint 對(duì)象以下程序代碼是為 DataTable 的兩列創(chuàng)建 UniqueConstraint對(duì)象:UniqueConstraint

44、custUC = new UniqueConstraint(new DataColumn customerTable.ColumnsCustomerID, customerTable.ColumnsCompanyName);customerTable .Constraints.Add(custUC);ForeignKeyConstraint對(duì)象的屬性屬性名稱屬性名稱數(shù)據(jù)類型數(shù)據(jù)類型說明說明AcceptRejectRuleAeceptRejectRule控制對(duì)父行調(diào)用控制對(duì)父行調(diào)用AcceptChanges方法或方法或RejectChanges方法是否影響子行方法是否影響子行ColumnsDat

45、aColumn對(duì)象數(shù)組對(duì)象數(shù)組返回構(gòu)成約束的子表中的列返回構(gòu)成約束的子表中的列ConstraintNameString包含約束的名稱包含約束的名稱DeleteRuleRule 控制對(duì)父行的刪除是否影響子行,或是控制對(duì)父行的刪除是否影響子行,或是怎樣影響子行怎樣影響子行ExtendedProperties PropertyCollection包含動(dòng)態(tài)屬性或動(dòng)態(tài)值的集合包含動(dòng)態(tài)屬性或動(dòng)態(tài)值的集合RelatedColumnsDataColumn對(duì)象數(shù)組對(duì)象數(shù)組返回構(gòu)成約束的父表中的列返回構(gòu)成約束的父表中的列RelatedTableDataTable返回跟約束有關(guān)的父表返回跟約束有關(guān)的父表TableD

46、ataTable返回跟約束有關(guān)的子表返回跟約束有關(guān)的子表UpdateRuleRule控制對(duì)父行的修改是否影響子行,或是控制對(duì)父行的修改是否影響子行,或是怎樣影響子行怎樣影響子行 ForeignKeyConstraint對(duì)象 ForeignKeyConstraint 的 DeleteRule 和 UpdateRule 屬性值:規(guī)則規(guī)則說明說明Cascade刪除或更新相關(guān)行。這是默認(rèn)值。刪除或更新相關(guān)行。這是默認(rèn)值。SetNull將相關(guān)行中的值設(shè)置為將相關(guān)行中的值設(shè)置為 DBNull。SetDefault將相關(guān)行中的值設(shè)置為默認(rèn)值。將相關(guān)行中的值設(shè)置為默認(rèn)值。None對(duì)相關(guān)行不采取任何操作對(duì)相關(guān)行

47、不采取任何操作ForeignKeyConstraint對(duì)象創(chuàng)建ForeignKeyConstraint對(duì)象的方法有很多:(1)使用Microsoft Visual Studio 2010設(shè)置DataTable的Constraints 屬性字段,打開約束集合編輯器,可創(chuàng)建ForeignKeyConstraint 對(duì)象;(2)通過編程使用ForeignKeyConstraint 構(gòu)造函數(shù)創(chuàng)建ForeignKeyConstraint對(duì)象,然后將創(chuàng)建的ForeignKeyConstraint 對(duì)象添加到該表的 Constraints 屬性中。ForeignKeyConstraint對(duì)象在創(chuàng)建 Fore

48、ignKeyConstraint對(duì)象時(shí),可將 DeleteRule 和 UpdateRule 值作為參數(shù)傳遞給構(gòu)造函數(shù),也可將它們?cè)O(shè)置屬性值(其中 UpdateRule 值設(shè)為默認(rèn)值,Cascade):ForeignKeyConstraint custOrderFK = new ForeignKeyConstraint(CustOrderFK,fastFoodDS.TablesCustomer.ColumnsCustomerID, fastFoodDS.TablesBookingOrder .ColumnsCustomerID);custOrderFK.DeleteRule = Rule.No

49、ne; fastFoodDS.TablesBookingOrder.Constraints.Add(custOrderFK);動(dòng)態(tài)構(gòu)建DataTableDataTable 對(duì)象是內(nèi)存中的數(shù)據(jù)表格,可以由它來緩存數(shù)據(jù),作為數(shù)據(jù)的操作對(duì)象。下面通過實(shí)例說明如何動(dòng)態(tài)創(chuàng)建DataTable:首先新建一個(gè)Windows窗體應(yīng)用程序ch52,從工具箱中把DataGridView控件拖拽到Form1窗體設(shè)計(jì)器中,名稱為dataGridView1,用來顯示動(dòng)態(tài)創(chuàng)建DataTable中的數(shù)據(jù)。(詳見教材P100)接下來在Form1.cs中添加如下代碼,其中GetData方法就是動(dòng)態(tài)創(chuàng)建DataTable的實(shí)例d

50、t對(duì)象,通過從數(shù)據(jù)庫中讀取數(shù)據(jù)并存入到動(dòng)態(tài)創(chuàng)建的dt對(duì)象中,然后綁定到dataGridView1控件上顯示數(shù)據(jù)。(具體代碼參考教材P101)DataTable的事件DataTable 對(duì)象提供一系列可以由應(yīng)用程序處理的事件。名稱名稱說明說明ColumnChanged 在在 DataRow 中指定的中指定的 DataColumn 的值被更改后發(fā)生。的值被更改后發(fā)生。 ColumnChanging 在在 DataRow 中指定的中指定的 DataColumn 的值發(fā)生更改時(shí)發(fā)生。的值發(fā)生更改時(shí)發(fā)生。 RowChanged 在成功更改在成功更改 DataRow 之后發(fā)生。之后發(fā)生。 RowChang

51、ing 在在 DataRow 正在更改時(shí)發(fā)生。正在更改時(shí)發(fā)生。 RowDeleted 在表中的行已被刪除后發(fā)生。在表中的行已被刪除后發(fā)生。 RowDeleting 在表中的行要被刪除之前發(fā)生。在表中的行要被刪除之前發(fā)生。 TableCleared 清除清除 DataTable 后發(fā)生。后發(fā)生。 TableClearing 清除清除 DataTable 后發(fā)生。后發(fā)生。 TableNewRow 插入新插入新 DataRow 時(shí)發(fā)生。時(shí)發(fā)生。 DataTable事件的實(shí)際用法workTable.ColumnChanged += new DataColumnChangeEventHandler(On

52、ColumnChanged);protected static void OnColumnChanged( object sender, DataColumnChangeEventArgs args) Console.Write( ColumnChanged: ); Console.Write(args.Column.ColumnName + changed to + args.ProposedValue + n);DataTable事件的實(shí)際用法workTable.ColumnChanging += new DataColumnChangeEventHandler(OnColumnChang

53、ing);protected static void OnColumnChanging( object sender, DataColumnChangeEventArgs args) Console.Write(ColumnChanging: ); Console.Write(args.Column.ColumnName + equals + args.Rowargs.Column + , changing to + args.ProposedValue + n); DataTable事件的實(shí)際用法workTable.RowChanged += new DataRowChangeEventHa

54、ndler(OnRowChanged);protected static void OnRowChanging( object sender, DataRowChangeEventArgs args) if (args.Action != DataRowAction.Nothing) Console.WriteLine( RowChanging: Action = + args.Action + , CustID = + args.RowCustID);DataTable事件的實(shí)際用法workTable.RowChanging += new DataRowChangeEventHandler(

55、OnRowChanging);protected static void OnRowChanged( object sender, DataRowChangeEventArgs args) if (args.Action != DataRowAction.Nothing) Console.WriteLine( RowChanged: Action = + args.Action + , CustID = + args.RowCustID);5.3關(guān)系數(shù)據(jù)ADO.NET的DataSet對(duì)象借助于DataRelation類也可以處理來自相關(guān)DataTable對(duì)象的數(shù)據(jù)。DataRelation 定

56、義兩張表之間的關(guān)系。在包含多個(gè) DataTable 對(duì)象的 DataSet 中,可以使用DataRelation 對(duì)象來使一張表與另一張表相關(guān)聯(lián),在多張表之間導(dǎo)航,以及從相關(guān)表中返回子行或父行。5.3關(guān)系數(shù)據(jù)創(chuàng)建DataRelation 所需的參數(shù)是所創(chuàng)建的DataRelation 的名稱以及對(duì)用作關(guān)系中父列和子列的那些列的一個(gè)或多個(gè) DataColumn 引用的數(shù)組。創(chuàng)建DataRelation對(duì)象的構(gòu)造函數(shù)主要有:(1)DataRelation (String, DataColumn, DataColumn) 使用指定的 DataRelation 名稱,父級(jí)和子級(jí) DataColumn 對(duì)

57、象,初始化 DataRelation 類的新實(shí)例。 (2)DataRelation (String, DataColumn, DataColumn) 使用指定的 DataRelation 名稱以及父級(jí)和子級(jí) DataColumn 對(duì)象的匹配的數(shù)組,初始化 DataRelation 類的新實(shí)例。 (3)DataRelation (String, DataColumn, DataColumn, Boolean) 使用指定名稱、父級(jí)和子級(jí) DataColumn 對(duì)象以及指示是否要?jiǎng)?chuàng)建約束的值,初始化 DataRelation 類的新實(shí)例。 (4)DataRelation (String, DataC

58、olumn, DataColumn, Boolean)使用指定的名稱、父級(jí)和子級(jí) DataColumn 對(duì)象的匹配數(shù)組以及指示是否要?jiǎng)?chuàng)建約束的值,初始化 DataRelation 類的新實(shí)例。 5.3關(guān)系數(shù)據(jù)默認(rèn)情況下,向DataSet 中添加DataRelation 會(huì)將一個(gè) UniqueConstraint 添加到父表中并將一個(gè) ForeignKeyConstraint 添加到子表中。5.3關(guān)系數(shù)據(jù)下面代碼示例為前文創(chuàng)建的fastFoodDS中的兩個(gè)DataTable 對(duì)象來創(chuàng)建一個(gè)DataRelation 。這兩個(gè)DataTable通過CustomterID列實(shí)現(xiàn)關(guān)聯(lián)。先創(chuàng)建一個(gè)Data

59、Relation對(duì)象,然后將這個(gè)DataRelation對(duì)象添加到fastFoodDS對(duì)象的的 Relations 集合中。該示例中的第一個(gè)參數(shù)指定所創(chuàng)建的DataRelation 的名稱。 第二個(gè)參數(shù)設(shè)置父 DataColumn,第三個(gè)參數(shù)設(shè)置子 DataColumn:DataRelation rel=new DataRelation(CustOrders, fastFoodDS.TablesCustomer.ColumnsCustomerID, fastFoodDS.TablesBookingOrder.ColumnsCustomerID);fastFoodDS.Relations.Add

60、(rel); 或者寫成:fastFoodDS.Relations.Add(CustOrders, fastFoodDS.TablesCustomer.ColumnsCustomerID, fastFoodDS.TablesBookingOrder.ColumnsCustomerID); DataRelation對(duì)象的常用屬性名稱名稱說明說明ChildColumns 獲取此關(guān)系的子獲取此關(guān)系的子 DataColumn 對(duì)象。對(duì)象。ChildKeyConstraint 獲取關(guān)系的獲取關(guān)系的 ForeignKeyConstraint。ChildTable 獲取此關(guān)系的子表。獲取此關(guān)系的子表。Data

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論