创建分层行集的父表和子表之间的关系

OLE DB 章节

分层行集或章节(OLE DB 类型 DBTYPE_HCHAPTER、ADO 类型 adChapter)可用于填充 DataSet 的内容。当 OleDbDataAdapter 在 Fill 操作过程中遇到章节列时,将为章节列创建一个 DataTable,并使用章节中的列和行填充该表。为章节列创建的表使用父表名称和章节列名称来命名,其形式为“ParentTableNameChapteredColumnName”。如果 DataSet 中已存在与章节列的名称相匹配的表,则将使用章节数据填充当前表。如果现有表中不存在与章节中的列相匹配的列,则将添加新列。

在使用章节列中的数据填充 DataSet 中的表之前,将创建分层行集的父表和子表之间的关系,方法是向父表和子表添加一个整数列,将父列设置为自动递增,然后使用两个表中所添加的列来创建 DataRelation。所添加的关系使用父表和章节列名称来命名,其形式为“ParentTableNameChapterColumnName”。

请注意,相关列仅存在于 DataSet 中。如果在随后从数据源进行填充,则将使新行被添加到表中,而不是使更改被并入现有行。

另请注意,如果使用采用 DataTable 的 DataAdapter.Fill 重载,则将只填充该表。仍会将自动递增整数列添加到该表中,但不会创建或填充任何子表并且不会创建任何关系。

以下示例使用 MSDataShape 提供程序为客户列表中的每个客户生成订单的章节列。然后使用相应数据来填充 DataSet。



Using connection As OleDbConnection = New OleDbConnection( _
  
"Provider=MSDataShape;Data Provider=SQLOLEDB;" & _
  
"Data Source=(local);Integrated " & _
  
"Security=SSPI;Initial Catalog=northwind")

Dim adapter As OleDbDataAdapter = New OleDbDataAdapter( _
  
"SHAPE {SELECT CustomerID, CompanyName FROM Customers} " & _
  
"APPEND ({SELECT CustomerID, OrderID FROM Orders} AS Orders " & _
  
"RELATE CustomerID TO CustomerID)", connection)

Dim customers As DataSet = New DataSet()

adapter.Fill(customers, 
"Customers")
End Using


 

当 Fill 操作完成时,DataSet 将包含两个表:Customers 和 CustomersOrders,其中 CustomersOrders 表示章节列。另外一个名为 Orders 的列被添加到 Customers 表中,另外一个名为 CustomersOrders 的列被添加到 CustomersOrders 表中。Customers 表中的 Orders 列设置为自动递增。DataRelation CustomersOrders 使用添加到以 Customers 作为父表的表中的列创建。下表显示了一些示例结果。

表名称:Customers
CustomerID CompanyName Orders

ALFKI

Alfreds Futterkiste

0

ANATR

Ana Trujillo Emparedados y helados

1

表名称:CustomersOrders
CustomerID OrderID CustomersOrders

ALFKI

10643

0

ALFKI

10692

0

ANATR

10308

1

ANATR

10625

1

http://msdn2.microsoft.com/zh-cn/library/bh8kx08z(VS.80).aspx

posted @ 2007-08-30 15:24  布袋  阅读(429)  评论(0编辑  收藏  举报