如何在数据表中追加一行?

时间:2009-12-03 13:49:19

标签: c# asp.net

我有一个数据表说dt1(它不断改变它的循环内部)。我有另一个数据表说dt2(最初是null)。现在我必须在dt2中附加dt1的行。我尝试使用Merge(),但之前的dt2行正在消失。 任何想法怎么做??

6 个答案:

答案 0 :(得分:1)

根据你的代码,我看到你正在使用dt2 = dt1.Clone(); 这是擦除dt2中的所有内容,所以你只是将dt1的当前内容添加到dt2。

您应该将dt1的内容合并到dt2。

,而不是克隆

答案 1 :(得分:1)

使用ImportRow方法,如下所示:

var table2 = new DataTable();

foreach(DataRow row in table1.Rows)
    table2.ImportRow(row);

答案 2 :(得分:1)

每次循环运行时,您都在清除dt2表。试试这个:

DataTable dt1 = null; DataTable dt2 = null;

for (int i = 0; i < dt3.Rows.Count; i++) 
{

    // here  "strSQL" is build which changes on the "i" value                  

    dt1 = GetDataTable(strSQL); // this returns a table with single Row

    if(dt2 == null) 
    {
       dt2 = dt1.Clone();
    }

    dt2.Merge(dt1,true);
}

此外,如果基于i的查询限制应用于主键列,则可以使用

dt2.ImportRow(dt1.Rows[0]);

而不是

dt2.Merge(dt1,true);

答案 3 :(得分:1)

JoãoAngelo的答案的另一个衍生物是提前初始化dt2然后你可以删除空检查

DataTable dt1 = null; DataTable dt2 = new DataTable();

for (int i = 0; i < dt3.Rows.Count; i++) 
{

    // here  "strSQL" is build which changes on the "i" value                  

    dt1 = GetDataTable(strSQL); // this returns a table with single Row

    dt2.Merge(dt1,true);
}

答案 4 :(得分:0)

这个怎么样:

  DataRow[] rows = new DataRow[dt1.Rows.Count];
  dt1.Rows.CopyTo(rows, 0);
  foreach (DataRow row in rows)
  {
    dt2.Rows.Add(row);
  }

答案 5 :(得分:0)

我假设你的桌子有相同的结构

 foreach (DataRow row in dt1.Rows)
     dt2.Rows.Add(row.ItemArray);