OLE DB 章节
分层行集或章节(OLE DB 类型 DBTYPE_HCHAPTER、ADO 类型 adChapter)可用于填充 DataSet 的内容。当 OleDbDataAdapter 在 Fill 操作过程中遇到章节列时,将为章节列创建一个 DataTable,并使用章节中的列和行填充该表。为章节列创建的表使用父表名称和章节列名称来命名,其形式为“ParentTableNameChapteredColumnName”。如果 DataSet 中已存在与章节列的名称相匹配的表,则将使用章节数据填充当前表。如果现有表中不存在与章节中的列相匹配的列,则将添加新列。
在使用章节列中的数据填充 DataSet 中的表之前,将创建分层行集的父表和子表之间的关系,方法是向父表和子表添加一个整数列,将父列设置为自动递增,然后使用两个表中所添加的列来创建 DataRelation。所添加的关系使用父表和章节列名称来命名,其形式为“ParentTableNameChapterColumnName”。
请注意,相关列仅存在于 DataSet 中。如果在随后从数据源进行填充,则将使新行被添加到表中,而不是使更改被并入现有行。
另请注意,如果使用采用 DataTable 的 DataAdapter.Fill 重载,则将只填充该表。仍会将自动递增整数列添加到该表中,但不会创建或填充任何子表并且不会创建任何关系。
以下示例使用 MSDataShape 提供程序为客户列表中的每个客户生成订单的章节列。然后使用相应数据来填充 DataSet。
"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 作为父表的表中的列创建。下表显示了一些示例结果。
CustomerID | CompanyName | Orders |
---|---|---|
ALFKI |
Alfreds Futterkiste |
0 |
ANATR |
Ana Trujillo Emparedados y helados |
1 |
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