作者對于ADO類理解與看法
下面介紹ADO類的四種有關(guān)介紹和方法,將四個表關(guān)聯(lián)在一起,并瀏覽這些關(guān)系。 如上例所示,CustomerID 使 Customers 表與 Orders 表相關(guān)聯(lián)。 對于 Customers 表中的每個客戶。
以返回特定客戶的訂單數(shù)以及他們的 由于 OrderDetails 表只包含已訂購產(chǎn)品的 ProductID,OrderDetails 將使用 ProductID 與 Products 相關(guān)聯(lián),以返回 ProductName。 在這一關(guān)系中,Products 表為父表,而 Order Details 表為子表。 因此,當(dāng)循環(huán)訪問 OrderDetails 表時,將調(diào)用 GetParentRow 來檢索相關(guān)的 ProductName 值。請注意,當(dāng)為 Customers 表和 Orders 表創(chuàng)建 DataRelation 時,ADO類沒有為 createConstraints 標(biāo)志指定任何值(默認(rèn)為 true)。
它假定 Orders 表中的所有行都具有一個存在于父 Customers 表中的 CustomerID 值。 如果 CustomerID 存在于 Customers 表之外的 Orders 表中,則 ForeignKeyConstraint 將引發(fā)異常。如果子列可能包含父列不包含的值,添加 DataRelation 時請將 createConstraints 標(biāo)志設(shè)置為 false。 在該示例中,ADO類對于 Orders 表和 OrderDetails 表之間的 DataRelation,createConstraints 標(biāo)志將設(shè)置為 false。 這樣,應(yīng)用程序就可以返回 OrderDetails 表中的所有記錄并只返回 Orders 表中記錄的子集,而不會生成運(yùn)行時異常。 該擴(kuò)展示例生成以下格式的輸出。
- DataRelationcustomerOrdersRelation=
- customerOrders.Relations.Add("CustOrders",
- customerOrders.Tables["Customers"].Columns["CustomerID"],
- customerOrders.Tables["Orders"].Columns["CustomerID"]);
- DataRelationorderDetailRelation=
- customerOrders.Relations.Add("OrderDetail",
- customerOrders.Tables["Orders"].Columns["OrderID"],
- customerOrders.Tables["OrderDetails"].Columns["OrderID"],false);
- DataRelationorderProductRelation=
- customerOrders.Relations.Add("OrderProducts",
- customerOrders.Tables["Products"].Columns["ProductID"],
- customerOrders.Tables["OrderDetails"].Columns["ProductID"]);
- foreach(DataRowcustRowincustomerOrders.Tables["Customers"].Rows)
- {
- Console.WriteLine("CustomerID:"+custRow["CustomerID"]);
- foreach(DataRoworderRowincustRow.GetChildRows(customerOrdersRelation))
- {
- Console.WriteLine("OrderID:"+orderRow["OrderID"]);
- Console.WriteLine("\tOrderDate:"+orderRow["OrderDate"]);
- foreach(DataRowdetailRowinorderRow.GetChildRows(orderDetailRelation))
- {
- Console.WriteLine("\tProduct:"+
- detailRow.GetParentRow(orderProductRelation)["ProductName"]);
- Console.WriteLine("\tQuantity:"+detailRow["Quantity"]);
- }
- }
以上代碼示例是一個擴(kuò)展示例,ADO類在該示例中將返回 OrderDetails 表和 Products 表中的值,并只返回 Orders 表中記錄的子集。