Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 在数据表中追加数据_Vb.net_Datatable - Fatal编程技术网

Vb.net 在数据表中追加数据

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循环,它在数据库上执行“Select”查询。我将结果存储在数据表中。在第二个循环中,我将再次执行“选择”查询,但这次我将得到不同的结果。是否有任何方法可以将所有这些数据存储到一个datatable中,而不丢失前一个循环中的数据

假例子

    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会丢失数据?也许主键有冲突?