是否有任何解决方案我可以将数据附加到一个数据表。
示例我有for循环,它在数据库上执行“Select”查询。我将结果存储在数据表中。在第二个循环中,我将再次执行“选择”查询,但这次我将得到不同的结果。有没有什么办法可以将所有这些数据存储到一个数据表而不会丢失先前循环中的数据
虚拟示例
For i = 0 To 10
_cmd.CommandText = _sQ ' With different parameter in this query
_da.SelectCommand = _cmd
_da.Fill(_dt)
Next
最后,我的_dt应该包含这10次迭代的所有数据。
答案 0 :(得分:1)
如果我知道结果中只有一行,我可能每次都不会填充数据表,但为了回答您的问题,您可以将一个数据表引用保留为主表,并在每次迭代时将表合并到其中:
Dim mainDT As New DataTable()
For i = 0 To 10
Dim dt As New DataTable()
_cmd.CommandText = _sQ ' With different parameter in this query
_da.SelectCommand = _cmd
_da.Fill(dt)
mainDT.Merge(dt)
Next
答案 1 :(得分:1)
DataAdapter.Fill
方法会自动将行添加到DataTable
:
您可以在同一
Fill
上多次使用DataTable
方法。如果一个 存在主键,传入的行与匹配的行合并 已经存在。如果不存在主键,则追加传入的行DataTable
。
所以你的代码已经是你想要的了:
For i = 0 To 10
_cmd.CommandText = _sQ ' With different parameter in this query
_da.SelectCommand = _cmd
_da.Fill(_dt)
Next
只要您没有自己指定主键列,就不会有更新的“危险”。所有行都附加到表中。我测试了它。
答案 2 :(得分:0)
您可以为结果设置动态列表,并为每个结果添加新的结果项。
稍后您可以通过列表
答案 3 :(得分:0)
到目前为止,最好的解决方案是消除循环并修改sql以一步处理所有查询。有两种方法可以做到这一点。第一个也是更好的方法是分析您的10个SQL语句并将它们归结为一个语句。
第二种方法效果较差但更容易。只需将SQL命令连接到UNION
查询:
Dim mainDT As New DataTable()
For i = 0 To 10
_cmd.CommandText = _cmd.CommandText & " UNION & " & _sQ ' With different parameter in this query
Next
_da.SelectCommand = _cmd
_da.Fill(mainDT)