作者對于ADO類理解與看法
下面介紹ADO類的四種有關介紹和方法,將四個表關聯(lián)在一起,并瀏覽這些關系。 如上例所示,CustomerID 使 Customers 表與 Orders 表相關聯(lián)。 對于 Customers 表中的每個客戶。
以返回特定客戶的訂單數(shù)以及他們的 由于 OrderDetails 表只包含已訂購產(chǎn)品的 ProductID,OrderDetails 將使用 ProductID 與 Products 相關聯(lián),以返回 ProductName。 在這一關系中,Products 表為父表,而 Order Details 表為子表。 因此,當循環(huán)訪問 OrderDetails 表時,將調用 GetParentRow 來檢索相關的 ProductName 值。請注意,當為 Customers 表和 Orders 表創(chuàng)建 DataRelation 時,ADO類沒有為 createConstraints 標志指定任何值(默認為 true)。
它假定 Orders 表中的所有行都具有一個存在于父 Customers 表中的 CustomerID 值。 如果 CustomerID 存在于 Customers 表之外的 Orders 表中,則 ForeignKeyConstraint 將引發(fā)異常。如果子列可能包含父列不包含的值,添加 DataRelation 時請將 createConstraints 標志設置為 false。 在該示例中,ADO類對于 Orders 表和 OrderDetails 表之間的 DataRelation,createConstraints 標志將設置為 false。 這樣,應用程序就可以返回 OrderDetails 表中的所有記錄并只返回 Orders 表中記錄的子集,而不會生成運行時異常。 該擴展示例生成以下格式的輸出。
- 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"]);
- }
- }
以上代碼示例是一個擴展示例,ADO類在該示例中將返回 OrderDetails 表和 Products 表中的值,并只返回 Orders 表中記錄的子集。