【问题标题】:Filtering SQL data into multiple DataTables in a single DataSet将 SQL 数据过滤到单个数据集中的多个数据表中
【发布时间】:2019-05-10 11:19:06
【问题描述】:

这应该很简单,但我现在已经忘记它了,因为我已经有十多年没有用 VB 编写过了。
我有一个存储过程,可以获取学生列表及其指定的班主任。
非常基本 - 只有三列:FirstNameLastNameTeacher

我需要将数据加载到一个 DataSet 中,其中每个 Teacher 都有自己的 DataTable,其中填充了分配给他们的学生。

样本数据:

所以在上面的示例中,我最终会得到 3 个名为 AdamsTaggertDublin 的数据表,每个数据表都以我可以调用的方式在单个数据集中填充了与它们相关联的学生数据:

For Each dr As DataRow In ds.Tables("Taggert").Rows
    ' Do something with dr("FirstName").ToString
Next

任何帮助将不胜感激。

【问题讨论】:

  • 你真的需要这样做吗?根据最终游戏的不同,对我来说,根本没有任何DataSet 并用所有数据填充一个DataTable,然后在那个DataTable 上创建三个DataViews 似乎更有意义,每个按不同的Teacher 值过滤。
  • @jmcilhinney 我同意有许多更好的方法,但我收到了一个已经存在多年的项目并被告知“修复它”。我试图做尽可能少的改变。旧代码基本上检索了一个教师列表,并在每个教师中循环调用另一个存储过程,一遍又一遍地添加新表。当访问教师列表消失时,这停止工作。所以我试图通过检索一个列表并动态解析它来完成相同的最终结果,以便程序的其余部分继续工作。

标签: vb.net dataset


【解决方案1】:

我最终使用了两个答案中的元素来找到解决方案。我最终使用 DataViews 来创建表,并将它们添加到新的 DataSet 中。它完美地工作。它遍历每条记录,但对于它处理的几百个学生来说,它实际上相当 高效的。感谢 cmets。

            For Each row As DataRow In ds.Tables(0).Rows
                Dim Teacher As String = row("Teacher").ToString()

                If Not dsOutput.Tables.Contains(Teacher) Then
                    Dim dvStudents = ds.Tables(0).DefaultView
                    dvStudents.RowFilter = "Teacher = '" & Teacher & "'"
                    Dim subTable As New DataTable(Teacher)
                    subTable = dvStudents.ToTable(Teacher)
                    dsOutput.Tables.Add(subTable)
                End If
            Next

【讨论】:

    【解决方案2】:

    old_datatable 与所有老师,我会声明,但你使用你自己的

        Dim old_datatable As New DataTable
        Dim new_dataset As New DataSet
        For Each row As DataRow In old_datatable.Rows
            Dim teacher As String = row("Teacher")
            If new_dataset.Tables.Contains(teacher) = False Then
                Dim new_datatable As New DataTable
                new_dataset.Tables.Add(new_datatable)
            End If
            new_dataset.Tables(teacher).Rows.Add(row)
        Next
    
        For Each dr As DataRow In new_dataset.Tables("Taggert").Rows
            ' Do something with dr("FirstName").ToString
        Next
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 1970-01-01
      • 2014-06-18
      • 1970-01-01
      • 2016-04-07
      • 1970-01-01
      • 2019-06-12
      相关资源
      最近更新 更多