【问题标题】:Inserting multiple parent rows and multiple child rows for each parent with ADO.NET in one setting在一个设置中使用 ADO.NET 为每个父级插入多个父行和多个子行
【发布时间】:2012-01-08 09:17:27
【问题描述】:

我正在寻找 ADO.NET 方面的操作指南或专家,他们可以向我解释如何正确解决以下场景:

我在一个数据集中有两个数据表:

  • 用户数据的父表(父 ID、名称)
  • 用于计划数据的子表(ParentID、ActivityID、...)

表在数据库级别通过ParentID 链接在一起,ParentTable 中的标识列。

两个表都是绑定到 GUI 上单独的DataGridView 的数据。表之间应该存在“1 个父/N 个子”关系,这意味着如果我在 ParentTable(一个新用户)中创建一个新条目,我会在子网格中获得一个干净的 DataGrid 来输入时间表数据用户。所以我为每个表设置了两个DataAdapters,将它们的结果填充到DataSet。我还设置了一个DataRelation 对象并将其分配给DataSet,以通过它们的ParentID 列链接两个表。此外,当我通过DataGridChildTable 中添加一行时,我使用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,则根本不会填充数据集...奇怪

标签: sql vb.net ado.net


【解决方案1】:

几点说明:

1) 两个表之间的关系很可能不正确,因为您在关系的两边都引用了 ParentID。我猜您需要将其更改为:

DSData.Relations.Add(New DataRelation("UserActivity", DSData.Tables(0).Columns("UserID"), DSData.Tables(1).Columns("ParentID")))

2) 您没有显示插入或更新命令,但如果它们是存储过程并且在该存储过程中生成了 UserID,那么您需要将其作为 OUTPUT 参数从存储过程中传回。您必须在插入/更新命令中同时更改 SP 和参数定义(如果有的话)。

【讨论】:

    猜你喜欢
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 2014-02-15
    • 2017-12-15
    • 2021-12-12
    • 1970-01-01
    相关资源
    最近更新 更多