向DataTable添加空行



是否可以通过一次调用向DataTable添加几行?

问题是,我需要创建一个DataTable,其中每一列在写入DataTable之前都需要进行先前的处理。逐行书写会很不方便。

也就是说,我需要创建一个具有N个空行的DataTable,然后以列为基础写入值。

如果没有循环,就不能添加多行。如果要将n行添加到所有列都为"空"的DataTable,请使用不带参数的DataRowCollection.Add

for(int i = 0; i < n; i++)
    table.Rows.Add();  // all fields get their default value

在for循环中(显然需要一个forloop来添加多行),您希望使用

for(int i = 0; i < n; i++)
    table.Rows.Add();   

如果你知道你想在一行中放什么,你可以调整这个代码:

DataRow newBlankRow = theDataTable.NewRow();
theDataTable.Rows.InsertAt(newBlankRow, theDataTable.Rows.Count);

对于有很多行的表,更好的解决方案是有一个"桌子预制";。让我们看一个例子。我们需要更新目的地(DST)表的10万行。我们有外部来源(SRC)表。我们知道SRC中的一些行可能不存在,这意味着特定行的列是DBNULL。如果我们只是将SRC合并到DST,则旧数据仍将在DST中。因此,为了清除这些数据,我们首先需要从SRC导入数据的列中提取所有数据,并保存另一个数据(实际上是从另一个源表中获取的)。

使用";对于下一个";不是首选-花费太多时间。我做下一个:

  1. 创建临时表(TMP),其中只有由匹配DST.PriaryKey的PrimaryKey组成的列(没有任何行yett)
  2. 将数据从DST合并到TMP-这将只创建行
  3. 手动添加与SRC匹配的列-这将创建";"空";行
  4. 将TMP合并到DST
  5. 然后将SRC合并到DST

这是VB:中的代码

Dim tmp As DataTable = New DataTable
Dim pk(dst.PrimaryKey.Length - 1) As DataColumn
For Each col As DataColumn In dst.PrimaryKey
    pk(j) = tmp.Columns.Add(col.ColumnName, col.DataType)
    j += 1
Next
tmp.PrimaryKey = pk
tmp.Merge(src, False, MissingSchemaAction.Ignore) 'add rows
For Each col As DataColumn In src.Columns 'add empty columns
    If dst.Columns.Contains(col.ColumnName) _
    AndAlso Not tmp.Columns.Contains(col.ColumnName) _
    Then tmp.Columns.Add(col.ColumnName, col.DataType)
Next
dst.Merge(tmp, True, MissingSchemaAction.Ignore) 'clear destination columns

最新更新