![第5章數(shù)據(jù)集DataSet_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-6/5/69355886-307f-4d42-bb69-9389e7fbb729/69355886-307f-4d42-bb69-9389e7fbb7291.gif)
![第5章數(shù)據(jù)集DataSet_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-6/5/69355886-307f-4d42-bb69-9389e7fbb729/69355886-307f-4d42-bb69-9389e7fbb7292.gif)
![第5章數(shù)據(jù)集DataSet_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-6/5/69355886-307f-4d42-bb69-9389e7fbb729/69355886-307f-4d42-bb69-9389e7fbb7293.gif)
![第5章數(shù)據(jù)集DataSet_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-6/5/69355886-307f-4d42-bb69-9389e7fbb729/69355886-307f-4d42-bb69-9389e7fbb7294.gif)
![第5章數(shù)據(jù)集DataSet_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-6/5/69355886-307f-4d42-bb69-9389e7fbb729/69355886-307f-4d42-bb69-9389e7fbb7295.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、目錄5.1非連接模型的案例5.2DataSet對象模型5.3關(guān)系數(shù)據(jù)5.4綜合運用5.5強類型DataSet5.6小結(jié)第第5章數(shù)據(jù)集章數(shù)據(jù)集DataSet5.1非連接模型的案例ADO.NET中的數(shù)據(jù)訪問模型可以分成兩種:連接模型和非連接模型。在連接模型中,.NET數(shù)據(jù)提供程序連接到數(shù)據(jù)源以后,才能對數(shù)據(jù)源的數(shù)據(jù)進(jìn)行數(shù)據(jù)處理,在這個過程中一直要保持連接狀態(tài),數(shù)據(jù)處理完成后斷開與數(shù)據(jù)源的連接。在非連接模型中,通過.NET數(shù)據(jù)提供程序連接到數(shù)據(jù)源,并為來自數(shù)據(jù)源的數(shù)據(jù)創(chuàng)建內(nèi)存中的緩存,這是可以斷開數(shù)據(jù)源的連接。然后在緩存中實現(xiàn)數(shù)據(jù)的查詢、修改、刪除的操作,完成后然后再與數(shù)據(jù)源建立連接,將更改的數(shù)據(jù)內(nèi)
2、容合并至數(shù)據(jù)源。在操作數(shù)據(jù)庫的時候,應(yīng)該盡可能晚地打開連接并且盡可能早地關(guān)閉連接是很重要的,這樣可以更好地利用連接池。相對于連接模型而言,非連接模型就更好地體現(xiàn)了這個思想。非連接模型需要緩存數(shù)據(jù),需要一個對象保存非連接數(shù)據(jù)。數(shù)據(jù)集DataSet,就是.NET框架自帶的可用于非連接的數(shù)據(jù)緩存。5.2DataSet對象模型DataSet 是 ADO.NET 結(jié)構(gòu)的主要組件,是專門為獨立于任何數(shù)據(jù)源的數(shù)據(jù)訪問而設(shè)計。因此,它可以用于多種不同的數(shù)據(jù)源,用于XML數(shù)據(jù),或用于管理應(yīng)用程序本地的數(shù)據(jù)。數(shù)據(jù)集DataSet,可以認(rèn)為是內(nèi)存中的數(shù)據(jù)庫,DataSet可以是不依賴于任何數(shù)據(jù)庫的獨立數(shù)據(jù)集合??蛻?/p>
3、端可以通過對DataSet的數(shù)據(jù)實現(xiàn)數(shù)據(jù)的查詢、修改、刪除等操作,從而實現(xiàn)對數(shù)據(jù)源的同等操作。DataSet支持多表、表間關(guān)系、數(shù)據(jù)約束等,和關(guān)系數(shù)據(jù)庫的模型基本一致。DataSet 由一組數(shù)據(jù)表DataTable 對象和數(shù)據(jù)關(guān)系DataRelation 對象組成,可以通過使用唯一鍵約束UniqueConstraint 和外鍵約束ForeignKeyConstraint 對象在 DataSet 中實施數(shù)據(jù)完整性約束。5.2DataSet對象模型5.2DataSet對象模型DataSet對象包含一個類型為DataTableCollection類型的DataTable對象集合,作為其Tables屬
4、性。它也包含一個名為Relations的屬性,該屬性是DataRelationCollection類型的DataRelation對象集合。類似地,DataTable對象具有一個名為Columns的屬性,是DataColumn對象集合,其表現(xiàn)形式是DataColumnCollection對象。它也包含一個DataRowCollection類型的屬性,名為Rows,以DataRows對象的形式表示各行記錄??梢栽贒ataTable上定義約束(比如UniqueConstraint),這是一個表現(xiàn)為Constraints屬性的集合,其類型為ConstraintCollection,可以賦值為一組Con
5、straint類型的對象,或是從Constraint對象繼承而來的對象。DataSet對象的屬性屬性名稱數(shù)據(jù)類型說明CassSensitiveBoolean指示DataSet對象中的字符串比較是否區(qū)分大小寫DataSetNameStringDataSet對象的名稱DefaultViewManagerDefaultViewManagerDataSet對象所包含的數(shù)據(jù)的自定義視圖,以允許使用自定義的DataViewManager對象進(jìn)行篩選、搜索和導(dǎo)航EnforceConstraintsBoolean指示在嘗試執(zhí)行任何更新操作時是否遵循約束規(guī)則ExtendedPropertiesPropertyC
6、ollection用戶自定義信息的集合HasErrorsBoolean所有DataTable對象中是否存在錯誤LocaleCultureInfo用于比較表中字符串的區(qū)域設(shè)置信息PrefixString一個XML前綴,該前綴是DataSet的命名空間的別名RelationsDataRelationCollectionDataSet對象中的數(shù)據(jù)關(guān)系的集合TablesDataTableCollectionDataSet對象中的數(shù)據(jù)表的集合DataSet對象的方法方法名稱返回類型說明AcceptChangevoid提交自加載此DataSet對象以后或最后一次調(diào)用AcceptChanges()方法以后對
7、DataSet對象進(jìn)行的所有更改Clearvoid通過移除所有表中的所有行來清除任何數(shù)據(jù)的DataSetCloneDataSet復(fù)制DataSet的結(jié)構(gòu),包括所有DataTable架構(gòu)、關(guān)系和約束。不要復(fù)制任何數(shù)據(jù)。CopyDataSet復(fù)制該DataSet對象的結(jié)構(gòu)和數(shù)據(jù)GetChangesDataSet獲取DataSet對象的副本,該副本包含自上次加載以來或自調(diào)用AcceptChanges()方法以來對該數(shù)據(jù)集進(jìn)行的所有更改GetXmlString返回存儲在DataSet對象中的數(shù)據(jù)的XML表示形式GetXmlSchemaString返回存儲在DataSet對象中的數(shù)據(jù)的XML表示形式的X
8、SD架構(gòu)HasChangesBoolean獲取一個值,該值指示DataSet對象是否有更改,包括新增行、已刪除的行或已修改的行Mergevoid將指定的DataSet、DataTable或DataRow對象的數(shù)組合并到當(dāng)前的DataSet或DataTable對象中ReadXmlXmlReadMode將XML架構(gòu)和數(shù)據(jù)讀入DataSet對象ReadXmlSchemavoid將XML架構(gòu)讀入DataSet對象RejectChangesvoid取消自從創(chuàng)建DataSet對象以來或自上次調(diào)用AcceptChanges()方法以來對DataSet對象進(jìn)行的所有更改Resetvoid將DataSet對象重
9、置為其初始狀態(tài)。子類應(yīng)重寫Reset對象,以便將DataSet對象還原到其原始狀態(tài)WriteXmlvoid方法用于從DataSet對象寫XML數(shù)據(jù),還可以選擇寫架構(gòu)WriteXmlSchemavoid寫XML架構(gòu)形式的DataSet結(jié)構(gòu)5.2DataSet對象模型創(chuàng)建DataSet 對象實例:使用Microsoft Visual Studio 2010創(chuàng)建DataSet實例編程方式實現(xiàn)創(chuàng)建DataSet實例:(1)初始化DataSet類的新實例。 DataSet ds = new DataSet();(2)用給定名稱初始化DataSet類的新實例。 DataSet FastFoodDS = n
10、ew DataSet(FastFood);DataTableDataTable 類是 .NET Framework 類庫中 System.Data 命名空間的成員。您可以獨立創(chuàng)建和使用 DataTable,也可以作為 DataSet 的成員創(chuàng)建和使用。每一個DataSet都是一個或多個DataTable 對象的集合(DataTable相當(dāng)于數(shù)據(jù)庫中的表),這些對象由數(shù)據(jù)行(DataRow)、數(shù)據(jù)列(DataColumn)、字段名(Column Name)、數(shù)據(jù)格(Item),以及約束(Constraint)和有關(guān)DataTable對象中數(shù)據(jù)的關(guān)系(Relations)與數(shù)據(jù)顯示排序(DataV
11、iew)信息組成。DataTable對象的屬性屬性名稱屬性名稱數(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獲取一個值,該值指示該表所屬的獲取一個值,該值指示該表所屬的 DataSet 的任何表的任何表的任何行中是否有錯誤。的任何行中是否有錯誤。LocaleCultureInfo獲取或設(shè)置用于比較表中字符串的區(qū)域設(shè)置信息。獲取或設(shè)置用于比較表中字符串的區(qū)域設(shè)置信息。MinimumCa
13、pacityInteger獲取或設(shè)置該表最初的起始大小。獲取或設(shè)置該表最初的起始大小。NamespaceString獲取或設(shè)置獲取或設(shè)置 DataTable 中所存儲數(shù)據(jù)的中所存儲數(shù)據(jù)的 XML 表示形表示形式的命名空間。式的命名空間。ParentRelationsDataRelationCollection 獲取該獲取該 DataTable 的父關(guān)系的集合。的父關(guān)系的集合。PrefixString獲取或設(shè)置獲取或設(shè)置 DataTable 中所存儲數(shù)據(jù)的中所存儲數(shù)據(jù)的 XML 表示形表示形式的命名空間。式的命名空間。PrimaryKeyDataColumn獲取或設(shè)置充當(dāng)數(shù)據(jù)表主鍵的列的數(shù)組。獲
14、取或設(shè)置充當(dāng)數(shù)據(jù)表主鍵的列的數(shù)組。RowsDataRowCollection獲取屬于該表的行的集合。獲取屬于該表的行的集合。TableNameString獲取或設(shè)置獲取或設(shè)置 DataTable 的名稱。的名稱。DataTable對象的方法方法名稱方法名稱返回值類型返回值類型說明說明AcceptChanges void 提 交 加 載提 交 加 載 D a t a Ta b l e 對 象 以 后 或 最 后 一 次 調(diào) 用對 象 以 后 或 最 后 一 次 調(diào) 用AcceptChanges()方法以后對方法以后對DataTable對象進(jìn)行的所有更改對象進(jìn)行的所有更改Clearvoid刪除刪除
15、DataTable對象中所有表格的所有行對象中所有表格的所有行Clone DataTable復(fù)制復(fù)制DataTable對象的結(jié)構(gòu),包括對象的結(jié)構(gòu),包括DataTable架構(gòu)、關(guān)系和架構(gòu)、關(guān)系和約束并返回。不復(fù)制任何數(shù)據(jù)。約束并返回。不復(fù)制任何數(shù)據(jù)。ComputeObject計算當(dāng)前行中通過過濾條件的指定表達(dá)式。計算當(dāng)前行中通過過濾條件的指定表達(dá)式。 GetChanges DataTable重載,取得上次裝入重載,取得上次裝入DataTable對象以后或最后一次調(diào)用對象以后或最后一次調(diào)用AcceptChanges()方法以后方法以后DataTable對的拷貝。對的拷貝。 GetError Dat
16、aRow重載,取得發(fā)生錯誤的所有重載,取得發(fā)生錯誤的所有DataRow對象的拷貝。對象的拷貝。 LoadDataRow DataRow尋找和更新指定的尋找和更新指定的DtatRow對象。對象。 如果找不到匹配的如果找不到匹配的DtatRow對象,則用指定的指生成新行。對象,則用指定的指生成新行。NewRow DataRow在在DataTable中生成新的中生成新的DtatRow對象。對象。 RejectChanges void取 消 加 載取 消 加 載 D a t a Ta b l e 對 象 以 后 或 最 后 一 次 調(diào) 用對 象 以 后 或 最 后 一 次 調(diào) 用AcceptChang
17、es()方法以后對方法以后對DataTable對象進(jìn)行的所有更改對象進(jìn)行的所有更改SelectDataRow重載,返回重載,返回 DataTable 中匹配指定過濾字符串的中匹配指定過濾字符串的DataRow對象。也可以傳入一個字符串,其中包含描述如何排序?qū)ο?。也可以傳入一個字符串,其中包含描述如何排序DataRow對象的細(xì)節(jié)。對象的細(xì)節(jié)。 創(chuàng)建DataTable 對象實例 使用Microsoft Visual Studio 2010創(chuàng)建DataTable實例(1)選擇創(chuàng)建的dataset1對象的Tables屬性右邊的省略號按鈕,會彈出一個表集合編輯器。(2)選擇Add,會添加一個名為Tabl
18、e1的表,在右邊的屬性中修改TableName屬性值為Customer,即在dataset1對象添加了一個名為Customer的表。具體操作見教材P92。創(chuàng)建DataTable 對象實例2編程方式實現(xiàn)創(chuàng)建DataTable實例(1)以下示例創(chuàng)建 DataTable 對象的實例,并為其指定名稱“Customer”:DataTable customerTable = new DataTable(Customer);DataTable bookingOrderTable = new DataTable(BookingOrder);(2)以下示例創(chuàng)建 DataTable 實例,將其添加到 DataSe
19、t 的 Tables 集合中。DataSet fastFoodDS = new DataSet();DataTable customerTable = fastFoodDS.Tables.Add(Customer);DataTable bookingOrderTable = fastFoodDS.Tables.Add(BookingOrder);DataColomn每個DataTable都有一個Columns集合,該集合是DataColumn對象的容器。一個DataColumn對象對應(yīng)表中的一列。DataColumn對象并非實際包含存儲在DataTable中的數(shù)據(jù),而是存儲了有關(guān)該列結(jié)構(gòu)的信息
20、。DataColomn對象的屬性屬性名稱屬性名稱數(shù)據(jù)類型數(shù)據(jù)類型說明說明AllowDBNull Boolean獲取或設(shè)置一個值獲取或設(shè)置一個值,該值指示對于屬于該表的行該值指示對于屬于該表的行,此列中是否允許空值。此列中是否允許空值。 AutoIncrement Boolean獲取或設(shè)置一個值,該值指示對于添加到該表中的新行,列是否將列獲取或設(shè)置一個值,該值指示對于添加到該表中的新行,列是否將列的值自動遞增。的值自動遞增。 AutoIncrementSeed Integer獲取或設(shè)置其獲取或設(shè)置其 AutoIncrement 屬性設(shè)置為屬性設(shè)置為 true 的列的起始值。的列的起始值。 Aut
21、oIncrementStep 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è)置存儲在列中的數(shù)據(jù)的類型。獲取或設(shè)置存儲在列中的數(shù)據(jù)的類型。 DefaultValue Objec
22、t在創(chuàng)建新行時獲取或設(shè)置列的默認(rèn)值。在創(chuàng)建新行時獲取或設(shè)置列的默認(rèn)值。 Expression String獲取或設(shè)置表達(dá)式,用于篩選行、計算列中的值或創(chuàng)建聚合列。獲取或設(shè)置表達(dá)式,用于篩選行、計算列中的值或創(chuàng)建聚合列。 ExtendedProperties PropertyCollection獲取與獲取與 DataColumn 相關(guān)的自定義用戶信息的集合。相關(guān)的自定義用戶信息的集合。 MaxLength Integer獲取或設(shè)置文本列的最大長度。獲取或設(shè)置文本列的最大長度。 Namespace String獲取或設(shè)置獲取或設(shè)置 DataColumn 的命名空間。的命名空間。 Ordinal I
23、nteger獲取列在獲取列在 DataColumnCollection 集合中的位置。集合中的位置。 Prefix String獲取或設(shè)置一個獲取或設(shè)置一個 XML 前綴,該前綴是前綴,該前綴是 DataTable 的命名空間的別名。的命名空間的別名。 ReadOnly Boolean獲取或設(shè)置一個值獲取或設(shè)置一個值,該值指示一旦向表中添加了行該值指示一旦向表中添加了行, 列是否還允許更改。列是否還允許更改。 Table DataTable獲取列所屬的獲取列所屬的 DataTable。 Unique Boolean獲取或設(shè)置一個值,該值指示列的每一行中的值是否必須是唯一的。獲取或設(shè)置一個值,該
24、值指示列的每一行中的值是否必須是唯一的。 為DataTable 對象創(chuàng)建DataColumn集合1使用Microsoft Visual Studio 2010創(chuàng)建DataColumn集合(1)接著上節(jié)創(chuàng)建DataTable的步驟繼續(xù)下去,點擊dataset1對象的Tables屬性右邊的省略號按鈕,在彈出的表集合編輯器中選擇Customer表,點擊其Columns屬性右邊的省略號按鈕,會彈出一個列集合編輯器,在這里可以添加DataColumn到Customer表中。(2)選擇Add,會添加一個名為Column1的列,在右邊的屬性中修改ColumnName屬性值為CustomerID、修改Data
25、Type屬性值為System.Int32、修改AllowDBNulle屬性值為False等等,這時Customer表就增加了一個CustomerID列。(3)選擇Add,可以依次為Customer表添加UserName、CompanyName和CompanyAddress列直至該表創(chuàng)建完成。具體操作見教材P94。為DataTable 對象創(chuàng)建DataColumn集合2編程方式實現(xiàn)創(chuàng)建DataColumn集合以下程序代碼就是向customerTable的列集合中添加四個DataColumn:DataSet fastFoodDS = new DataSet();DataTable customer
26、Table = 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(Compan
27、yAddress , typeof(String);程序中用于 CustomerID列的屬性設(shè)置為不允許 DBNull 值并將值約束為唯一。為DataTable 對象創(chuàng)建DataColumn集合2編程方式實現(xiàn)創(chuàng)建DataColumn集合以下程序代碼是向bookingOrderTable的列集合中添加三個DataColumn:DataTable bookingOrderTable = fastFoodDS.Tables.Add(BookingOrder);DataColumn col = bookingOrderTable.Columns.Add(OrderID,typeof(int32); b
28、ookingOrderTable.Columns.Add(CustomerID , typeof(Int32);bookingOrderTable.Columns.Add(Number, typeof(Int32);DataRowDataRow 和 DataColumn 對象都是 DataTable 的主要組件。DataColumn 對象是描述DataTable數(shù)據(jù)結(jié)構(gòu)的,而DataRow 對象是描述DataTable數(shù)據(jù)內(nèi)容的。DataRow對象添加在DataTable 的屬性Rows中,屬性Rows 的類型是DataRowCollection。為DataTable創(chuàng)建DataRow對象1、
29、 使用 DataTable 對象的 NewRow 方法創(chuàng)建新的DataRow:DataRow workRow = customerTable.NewRow(); / customerTable結(jié)構(gòu)參考上節(jié)的定義2、使用索引或列名來為新建的行對象設(shè)置各個DataColomn值:workRowCustomerID =1001;workRowUserName = 喬峰;或用:workRow1 = 喬峰;3、使用DataTable對象的Add方法將新的DataRow添加到DataTable 中的Rows屬性中:customerTable.Rows.Add(workRow);為DataTable創(chuàng)建Da
30、taRow對象也可以通過傳入值的數(shù)組(類型化為Object),調(diào)用 Add 方法來添加新行: customerTable.Rows.Add(new Object 1002, 郭靖);將類型化為 Object 的值的數(shù)組傳遞到 Add 方法,可在表內(nèi)創(chuàng)建新行并將其列值設(shè)置為對象數(shù)組中的值。請注意,數(shù)組中的值會根據(jù)它們在表中出現(xiàn)的順序相繼與各列匹配。以下代碼段是向customerTable對象中添加了 10 行數(shù)據(jù):DataRow workRow;for (int i = 0; i = 9; i+) workRow = customerTable.NewRow(); workRow0 = i; w
31、orkRow1 = userName + i.ToString(); customerTable.Rows.Add(workRow);從DataTable中讀取DataRow對象通過DataTable對象中的Rows屬性,獲取DataRow對象集合,通過索引獲得DataRow對象,然后使用DataRow對象的Item屬性來讀取該行中任意列的值。由于Item是DataRow類的默認(rèn)屬性,所以可以隱式地使用它。如下面的代碼段就是向控制臺輸出customerTable對象第一行第一列(CustomerID)的值:DataRow row;row = customerTable.Rows0;Consol
32、e.WriteLine(row0);Console.WriteLine(rowCustomerID);Console.WriteLine(rowcustomerTable.ColumnsCustomerID);DataRow對象的屬性屬性名稱屬性名稱數(shù)據(jù)類型數(shù)據(jù)類型說明說明HasErrors Boolean獲取一個值,該值指示某行是否包含錯誤。獲取一個值,該值指示某行是否包含錯誤。 Item Object已重載。已重載。 獲取或設(shè)置存儲在指定列中的數(shù)據(jù)。獲取或設(shè)置存儲在指定列中的數(shù)據(jù)。 ItemArray Object數(shù)組數(shù)組通過一個數(shù)組來獲取或設(shè)置此行的所有值。通過一個數(shù)組來獲取或設(shè)置此行的
33、所有值。 RowError String獲取或設(shè)置行的自定義錯誤說明。獲取或設(shè)置行的自定義錯誤說明。 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對象的方法方法名稱方法名稱返回值類型返回值類型說明說明AcceptChange
34、s void提交自上次調(diào)用提交自上次調(diào)用 AcceptChanges 以來對該行進(jìn)行的所有更改。以來對該行進(jìn)行的所有更改。 BeginEdit void對對 DataRow 對象開始編輯操作。對象開始編輯操作。 CancelEdit void取消對該行的當(dāng)前編輯。取消對該行的當(dāng)前編輯。 ClearErrors void清除行的錯誤。這包括清除行的錯誤。這包括 RowError 和用和用 SetColumnError 設(shè)設(shè)置的錯誤。置的錯誤。 Delete void刪除刪除 DataRow。 EndEdit void終止發(fā)生在該行的編輯。終止發(fā)生在該行的編輯。 GetChildRows Data
35、Row已重載。已重載。 獲取獲取 DataRow 的子行。的子行。 GetColumnError String已重載。已重載。 獲取列的錯誤說明。獲取列的錯誤說明。 GetColumnsInError DataColumn獲取包含錯誤的列的數(shù)組。獲取包含錯誤的列的數(shù)組。 GetParentRow DataRow已重載。已重載。 獲取獲取 DataRow 的父行。的父行。 GetParentRows DataRow已重載。已重載。 獲取獲取 DataRow 的父行。的父行。 HasVersion Boolean獲取一個值,該值指示指定的版本是否存在。獲取一個值,該值指示指定的版本是否存在。 Is
36、Null Boolean已重載。獲取一個值已重載。獲取一個值,該值指示指定的列是否包含空值。該值指示指定的列是否包含空值。 RejectChanges void拒絕自上次調(diào)用拒絕自上次調(diào)用 AcceptChanges 以來對該行進(jìn)行的所有更改。以來對該行進(jìn)行的所有更改。 SetAdded void將將 DataRow 的的 Rowstate 更改為更改為 Added。 SetColumnError void已重載。已重載。 為列設(shè)置錯誤說明。為列設(shè)置錯誤說明。 SetModified void將將 DataRow 的的 Rowstate 更改為更改為 Modified。 SetParentRo
37、w void已重載。已重載。 設(shè)置設(shè)置 DataRow 的父行。的父行。 設(shè)置主鍵:PrimaryKey屬性數(shù)據(jù)庫表通常都有一列或一組列,用于唯一地標(biāo)識表中的每一行。這種具有標(biāo)識作用的列或列組被稱為主鍵(PrimaryKey )。DataTable的PrimaryKey 屬性會將一個或多個 DataColumn 對象的數(shù)組接收為它的值。在將一個單獨的 DataColumn 標(biāo)識為 DataTable 的 PrimaryKey 時,表會自動將列的 AllowDBNull 屬性設(shè)置為 false,并將 Unique 屬性設(shè)置為 true。如果是多列主鍵,則只有 AllowDBNull 屬性自動設(shè)置
38、為 false。使用Microsoft Visual Studio 2010設(shè)置DataTable的PrimaryKey 屬性字段,打開表集合編輯器,選擇表,然后在屬性窗口中設(shè)置PrimaryKey屬性,具體操作參考教材P97圖5-9。編程實現(xiàn)對PrimaryKey 屬性的設(shè)置(1)將單獨一列定義為主鍵:customerTable.PrimaryKey = new DataColumn customerTable.ColumnsCustomerID;或者寫成:DataColumn myColArray = new DataColumn1;myColArray0 = customerTable.
39、ColumnsCustomerID;customerTable.PrimaryKey = myColArray;()將兩列或多列定義為主鍵“customerTable.PrimaryKey = new DataColumn customerTable.ColumnsUserName, customerTable.ColumnsCompanyName ;或者寫成:DataColumn myKey = new DataColumn2;myKey0 = customerTable.ColumnsUserName;myKey1 = customerTable.ColumnsCompanyName;cu
40、stomerTable.PrimaryKey = myKey;表約束ConstraintADO.NET 中DataTable有兩種約束: 唯一約束(UniqueConstraint):確保指定的某列或多個列中的數(shù)據(jù)組合在同一個DataTable中的唯一性,防止數(shù)據(jù)冗余。外鍵約束(ForeignKeyConstraint):是DataTable之間的約束規(guī)則。ForeignKeyConstraint 強制了有關(guān)如何對相關(guān)表所做更新和刪除進(jìn)行傳播的規(guī)則。例如,如果更新或刪除了一個表格中的某行中的值,并且一個或多個相關(guān)的表中也使用了這個相同的值,F(xiàn)oreignKeyConstraint 將會決定相關(guān)
41、表中發(fā)生的操作。默認(rèn)情況下,通過將 DataRelation 添加至 DataSet 來創(chuàng)建兩張或多張表之間的關(guān)系時,兩種約束都會自動創(chuàng)建。UniqueConstraint對象的屬性屬性名稱屬性名稱數(shù)據(jù)類型數(shù)據(jù)類型說明說明ColumnsDataColumn對象數(shù)組對象數(shù)組返回作為約束中一部分的返回作為約束中一部分的列列ConstraintNameString包含約束的名稱包含約束的名稱ExtendedProperties PropertyCollection包含動態(tài)屬性和動態(tài)值的包含動態(tài)屬性和動態(tài)值的集合集合IsPrimaryKeyBoolean表示約束是否是表示約束是否是DataTable的
42、主鍵的主鍵TableDataTable返回約束所屬的返回約束所屬的DataTableUniqueConstraint 對象下面是幾種創(chuàng)建UniqueConstraint 對象的方法:(1)使用Microsoft Visual Studio 2010設(shè)置DataTable的Constraints 屬性字段,打開約束集合編輯器,可創(chuàng)建UniqueConstraint 對象;(2)將DataTable 的某列的Unique 屬性設(shè)置為 true,會自動創(chuàng)建UniqueConstraint 對象。通過將單列的 Unique 屬性設(shè)置為 false,則相關(guān)的UniqueConstraint對象也被刪除;
43、(3)當(dāng)設(shè)置DataTable 的 PrimaryKey 時,會自動創(chuàng)建UniqueConstraint 對象;從 DataTable 的 PrimaryKey 屬性中刪除時,則相關(guān)的UniqueConstraint對象也被刪除。(4)通過編程使用UniqueConstraint 構(gòu)造函數(shù)創(chuàng)建UniqueConstraint對象,然后將創(chuàng)建的UniqueConstraint 對象添加到該表的 Constraints 屬性中。UniqueConstraint 對象以下程序代碼是為 DataTable 的兩列創(chuàng)建 UniqueConstraint對象:UniqueConstraint custUC
44、 = new UniqueConstraint(new DataColumn customerTable.ColumnsCustomerID, customerTable.ColumnsCompanyName);customerTable .Constraints.Add(custUC);ForeignKeyConstraint對象的屬性屬性名稱屬性名稱數(shù)據(jù)類型數(shù)據(jù)類型說明說明AcceptRejectRuleAeceptRejectRule控制對父行調(diào)用控制對父行調(diào)用AcceptChanges方法或方法或RejectChanges方法是否影響子行方法是否影響子行ColumnsDataColum
45、n對象數(shù)組對象數(shù)組返回構(gòu)成約束的子表中的列返回構(gòu)成約束的子表中的列ConstraintNameString包含約束的名稱包含約束的名稱DeleteRuleRule 控制對父行的刪除是否影響子行,或是控制對父行的刪除是否影響子行,或是怎樣影響子行怎樣影響子行ExtendedProperties PropertyCollection包含動態(tài)屬性或動態(tài)值的集合包含動態(tài)屬性或動態(tài)值的集合RelatedColumnsDataColumn對象數(shù)組對象數(shù)組返回構(gòu)成約束的父表中的列返回構(gòu)成約束的父表中的列RelatedTableDataTable返回跟約束有關(guān)的父表返回跟約束有關(guān)的父表TableDataTab
46、le返回跟約束有關(guān)的子表返回跟約束有關(guān)的子表UpdateRuleRule控制對父行的修改是否影響子行,或是控制對父行的修改是否影響子行,或是怎樣影響子行怎樣影響子行 ForeignKeyConstraint對象 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對相關(guān)行不采取任何操作對相關(guān)行不采取任何操
47、作ForeignKeyConstraint對象創(chuàng)建ForeignKeyConstraint對象的方法有很多:(1)使用Microsoft Visual Studio 2010設(shè)置DataTable的Constraints 屬性字段,打開約束集合編輯器,可創(chuàng)建ForeignKeyConstraint 對象;(2)通過編程使用ForeignKeyConstraint 構(gòu)造函數(shù)創(chuàng)建ForeignKeyConstraint對象,然后將創(chuàng)建的ForeignKeyConstraint 對象添加到該表的 Constraints 屬性中。ForeignKeyConstraint對象在創(chuàng)建 ForeignKey
48、Constraint對象時,可將 DeleteRule 和 UpdateRule 值作為參數(shù)傳遞給構(gòu)造函數(shù),也可將它們設(shè)置屬性值(其中 UpdateRule 值設(shè)為默認(rèn)值,Cascade):ForeignKeyConstraint custOrderFK = new ForeignKeyConstraint(CustOrderFK,fastFoodDS.TablesCustomer.ColumnsCustomerID, fastFoodDS.TablesBookingOrder .ColumnsCustomerID);custOrderFK.DeleteRule = Rule.None; fa
49、stFoodDS.TablesBookingOrder.Constraints.Add(custOrderFK);動態(tài)構(gòu)建DataTableDataTable 對象是內(nèi)存中的數(shù)據(jù)表格,可以由它來緩存數(shù)據(jù),作為數(shù)據(jù)的操作對象。下面通過實例說明如何動態(tài)創(chuàng)建DataTable:首先新建一個Windows窗體應(yīng)用程序ch52,從工具箱中把DataGridView控件拖拽到Form1窗體設(shè)計器中,名稱為dataGridView1,用來顯示動態(tài)創(chuàng)建DataTable中的數(shù)據(jù)。(詳見教材P100)接下來在Form1.cs中添加如下代碼,其中GetData方法就是動態(tài)創(chuàng)建DataTable的實例dt對象,通過
50、從數(shù)據(jù)庫中讀取數(shù)據(jù)并存入到動態(tài)創(chuàng)建的dt對象中,然后綁定到dataGridView1控件上顯示數(shù)據(jù)。(具體代碼參考教材P101)DataTable的事件DataTable 對象提供一系列可以由應(yīng)用程序處理的事件。名稱名稱說明說明ColumnChanged 在在 DataRow 中指定的中指定的 DataColumn 的值被更改后發(fā)生。的值被更改后發(fā)生。 ColumnChanging 在在 DataRow 中指定的中指定的 DataColumn 的值發(fā)生更改時發(fā)生。的值發(fā)生更改時發(fā)生。 RowChanged 在成功更改在成功更改 DataRow 之后發(fā)生。之后發(fā)生。 RowChanging 在在
51、 DataRow 正在更改時發(fā)生。正在更改時發(fā)生。 RowDeleted 在表中的行已被刪除后發(fā)生。在表中的行已被刪除后發(fā)生。 RowDeleting 在表中的行要被刪除之前發(fā)生。在表中的行要被刪除之前發(fā)生。 TableCleared 清除清除 DataTable 后發(fā)生。后發(fā)生。 TableClearing 清除清除 DataTable 后發(fā)生。后發(fā)生。 TableNewRow 插入新插入新 DataRow 時發(fā)生。時發(fā)生。 DataTable事件的實際用法workTable.ColumnChanged += new DataColumnChangeEventHandler(OnColumn
52、Changed);protected static void OnColumnChanged( object sender, DataColumnChangeEventArgs args) Console.Write( ColumnChanged: ); Console.Write(args.Column.ColumnName + changed to + args.ProposedValue + n);DataTable事件的實際用法workTable.ColumnChanging += new DataColumnChangeEventHandler(OnColumnChanging);p
53、rotected 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事件的實際用法workTable.RowChanged += new DataRowChangeEventHandler(
54、OnRowChanged);protected static void OnRowChanging( object sender, DataRowChangeEventArgs args) if (args.Action != DataRowAction.Nothing) Console.WriteLine( RowChanging: Action = + args.Action + , CustID = + args.RowCustID);DataTable事件的實際用法workTable.RowChanging += new DataRowChangeEventHandler(OnRowC
55、hanging);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對象借助于DataRelation類也可以處理來自相關(guān)DataTable對象的數(shù)據(jù)。DataRelation 定義兩張表之間
56、的關(guān)系。在包含多個 DataTable 對象的 DataSet 中,可以使用DataRelation 對象來使一張表與另一張表相關(guān)聯(lián),在多張表之間導(dǎo)航,以及從相關(guān)表中返回子行或父行。5.3關(guān)系數(shù)據(jù)創(chuàng)建DataRelation 所需的參數(shù)是所創(chuàng)建的DataRelation 的名稱以及對用作關(guān)系中父列和子列的那些列的一個或多個 DataColumn 引用的數(shù)組。創(chuàng)建DataRelation對象的構(gòu)造函數(shù)主要有:(1)DataRelation (String, DataColumn, DataColumn) 使用指定的 DataRelation 名稱,父級和子級 DataColumn 對象,初始化
57、DataRelation 類的新實例。 (2)DataRelation (String, DataColumn, DataColumn) 使用指定的 DataRelation 名稱以及父級和子級 DataColumn 對象的匹配的數(shù)組,初始化 DataRelation 類的新實例。 (3)DataRelation (String, DataColumn, DataColumn, Boolean) 使用指定名稱、父級和子級 DataColumn 對象以及指示是否要創(chuàng)建約束的值,初始化 DataRelation 類的新實例。 (4)DataRelation (String, DataColumn,
58、 DataColumn, Boolean)使用指定的名稱、父級和子級 DataColumn 對象的匹配數(shù)組以及指示是否要創(chuàng)建約束的值,初始化 DataRelation 類的新實例。 5.3關(guān)系數(shù)據(jù)默認(rèn)情況下,向DataSet 中添加DataRelation 會將一個 UniqueConstraint 添加到父表中并將一個 ForeignKeyConstraint 添加到子表中。5.3關(guān)系數(shù)據(jù)下面代碼示例為前文創(chuàng)建的fastFoodDS中的兩個DataTable 對象來創(chuàng)建一個DataRelation 。這兩個DataTable通過CustomterID列實現(xiàn)關(guān)聯(lián)。先創(chuàng)建一個DataRelati
59、on對象,然后將這個DataRelation對象添加到fastFoodDS對象的的 Relations 集合中。該示例中的第一個參數(shù)指定所創(chuàng)建的DataRelation 的名稱。 第二個參數(shù)設(shè)置父 DataColumn,第三個參數(shù)設(shè)置子 DataColumn:DataRelation rel=new DataRelation(CustOrders, fastFoodDS.TablesCustomer.ColumnsCustomerID, fastFoodDS.TablesBookingOrder.ColumnsCustomerID);fastFoodDS.Relations.Add(rel);
60、 或者寫成:fastFoodDS.Relations.Add(CustOrders, fastFoodDS.TablesCustomer.ColumnsCustomerID, fastFoodDS.TablesBookingOrder.ColumnsCustomerID); DataRelation對象的常用屬性名稱名稱說明說明ChildColumns 獲取此關(guān)系的子獲取此關(guān)系的子 DataColumn 對象。對象。ChildKeyConstraint 獲取關(guān)系的獲取關(guān)系的 ForeignKeyConstraint。ChildTable 獲取此關(guān)系的子表。獲取此關(guān)系的子表。DataSet 獲取
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建立高效的財務(wù)業(yè)務(wù)運作模式
- 2025年全球及中國工業(yè)級4-芐氧基苯酚行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國石墨片保護(hù)膜行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國消費電子NFC天線行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國旅游廣告和營銷服務(wù)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球非侵入式血流動力學(xué)監(jiān)測解決方案行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國光伏舟托行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國晶須碳納米管行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國溴化鈣粉行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球高壓鎳氫電池行業(yè)調(diào)研及趨勢分析報告
- 高中物理考試成績分析報告
- 部編版小學(xué)語文三年級上冊同步練習(xí)試題含答案(全冊)
- 血性胸水的護(hù)理課件
- 四年級數(shù)學(xué)下冊口算天天練45
- 雕塑采購?fù)稑?biāo)方案(技術(shù)標(biāo))
- 北京房地產(chǎn)典當(dāng)合同書
- 文學(xué)類文本閱讀 高一語文統(tǒng)編版暑假作業(yè)
- 文明施工考核標(biāo)準(zhǔn)
- 《霧都孤兒人物分析4000字(論文)》
- MZ/T 039-2013老年人能力評估
- GB/T 6329-1996膠粘劑對接接頭拉伸強度的測定
評論
0/150
提交評論