【发布时间】:2012-01-08 09:17:27
【问题描述】:
我正在寻找 ADO.NET 方面的操作指南或专家,他们可以向我解释如何正确解决以下场景:
我在一个数据集中有两个数据表:
- 用户数据的父表(父 ID、名称)
- 用于计划数据的子表(ParentID、ActivityID、...)
表在数据库级别通过ParentID 链接在一起,ParentTable 中的标识列。
两个表都是绑定到 GUI 上单独的DataGridView 的数据。表之间应该存在“1 个父/N 个子”关系,这意味着如果我在 ParentTable(一个新用户)中创建一个新条目,我会在子网格中获得一个干净的 DataGrid 来输入时间表数据用户。所以我为每个表设置了两个DataAdapters,将它们的结果填充到DataSet。我还设置了一个DataRelation 对象并将其分配给DataSet,以通过它们的ParentID 列链接两个表。此外,当我通过DataGrid 在ChildTable 中添加一行时,我使用SetParentRow 设置父行。
With DAUser
.SelectCommand = New SqlCommand("UsersSelect", conn)
.SelectCommand.CommandType = CommandType.StoredProcedure
.SelectCommand.Parameters.AddWithValue("@UserID", MyID)
.Fill(DSData)
End With
With DAActivity
.SelectCommand = New SqlCommand("ActivitiesSelect", conn)
.SelectCommand.CommandType = CommandType.StoredProcedure
.SelectCommand.Parameters.AddWithValue("@UserID", MyID)
.Fill(DSData)
End With
DSData.Relations.Add(New DataRelation("UserActivity", DSData.Tables(0).Columns("ParentID"), DSData.Tables(1).Columns("ParentID")))
在 ChildTable 中添加行:
Private Sub DTChildData_TableNewRow(sender As Object, e As System.Data.DataTableNewRowEventArgs) Handles DTChildData.TableNewRow
e.Row.SetParentRow(ParentDataRow)
End Sub
当ParentTable 更新时,ChildTable 中的ParentID 列并未填充从数据库中检索到的标识值。
为什么?由于这个问题,我开始大量脱发...
【问题讨论】:
-
在第二次Fill操作之前有一个默认表名“Table”的重命名,这样第一个表就不会被覆盖。另外,如果我使用 FillSchema 而不是 Fill,则根本不会填充数据集...奇怪