Vb.net 在数据表中追加数据
是否有任何解决方案可以将数据附加到一个数据表中 例如,我有一个for循环,它在数据库上执行“Select”查询。我将结果存储在数据表中。在第二个循环中,我将再次执行“选择”查询,但这次我将得到不同的结果。是否有任何方法可以将所有这些数据存储到一个datatable中,而不丢失前一个循环中的数据 假例子Vb.net 在数据表中追加数据,vb.net,datatable,Vb.net,Datatable,是否有任何解决方案可以将数据附加到一个数据表中 例如,我有一个for循环,它在数据库上执行“Select”查询。我将结果存储在数据表中。在第二个循环中,我将再次执行“选择”查询,但这次我将得到不同的结果。是否有任何方法可以将所有这些数据存储到一个datatable中,而不丢失前一个循环中的数据 假例子 For i = 0 To 10 _cmd.CommandText = _sQ ' With different parameter in this query
For i = 0 To 10
_cmd.CommandText = _sQ ' With different parameter in this query
_da.SelectCommand = _cmd
_da.Fill(_dt)
Next
最后,my_dt应该包含这10次迭代的所有数据。您可以为结果设置动态列表,并为每个结果添加新的结果项
稍后,您只需浏览列表即可您可以为结果设置动态列表,并为每个结果添加新的结果项
稍后,您可以查看列表如果我知道结果中只有一行,我可能不会每次填充一个数据表,但要回答您的问题,您可以保留一个数据表引用作为主表,并在每次迭代中将一个表合并到其中:
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
如果我知道结果中只有一行,我可能不会每次都填充一个datatable,但为了回答您的问题,您可以保留一个datatable引用作为主表,并在每次迭代时将一个表合并到其中:
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
该方法将自动将行附加到数据表
:
您可以在同一数据表上多次使用Fill
方法。如果
主键存在,传入行与匹配的行合并
已经存在。如果不存在主键,则将传入行追加到
数据表
因此,您的代码已经满足了您的要求:
For i = 0 To 10
_cmd.CommandText = _sQ ' With different parameter in this query
_da.SelectCommand = _cmd
_da.Fill(_dt)
Next
只要您不自己指定主键列,您就不会有更新的“危险”。所有行都追加到表中。我已经测试过了。该方法将自动将行附加到数据表中
:
您可以在同一数据表上多次使用Fill
方法。如果
主键存在,传入行与匹配的行合并
已经存在。如果不存在主键,则将传入行追加到
数据表
因此,您的代码已经满足了您的要求:
For i = 0 To 10
_cmd.CommandText = _sQ ' With different parameter in this query
_da.SelectCommand = _cmd
_da.Fill(_dt)
Next
只要您不自己指定主键列,您就不会有更新的“危险”。所有行都追加到表中。我已经对它进行了测试。到目前为止,最好的解决方案是消除循环,并修改sql以在一个步骤中处理所有查询。有两种方法可以做到这一点。第一种也是更好的方法是分析10条SQL语句,并将它们归结为一条语句
第二种方法效率较低,但更简单。只需将SQL命令连接到一个联合
查询:
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)
到目前为止,最好的解决方案是消除循环并修改sql以一步处理所有查询。有两种方法可以做到这一点。第一种也是更好的方法是分析10条SQL语句,并将它们归结为一条语句
第二种方法效率较低,但更简单。只需将SQL命令连接到一个联合
查询:
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)
实际上没人说会是一排。有时大约是200行,有时是0。@myString,我的错,我把“这10次迭代中的所有数据”理解为10行。你说得对。@Crowcoder:不需要合并表,DataAdaper.Fill在默认情况下已经将行附加到现有表中了。@TimSchmelter,确实如此。那么为什么OP会丢失数据?也许主键有冲突?事实上没人说会是一排。有时大约是200行,有时是0。@myString,我的错,我把“这10次迭代中的所有数据”理解为10行。你说得对。@Crowcoder:不需要合并表,DataAdaper.Fill在默认情况下已经将行附加到现有表中了。@TimSchmelter,确实如此。那么为什么OP会丢失数据?也许主键有冲突?