是否可以通过一次调用向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导入数据的列中提取所有数据,并保存另一个数据(实际上是从另一个源表中获取的)。
使用";对于下一个";不是首选-花费太多时间。我做下一个:
- 创建临时表(TMP),其中只有由匹配DST.PriaryKey的PrimaryKey组成的列(没有任何行yett)
- 将数据从DST合并到TMP-这将只创建行
- 手动添加与SRC匹配的列-这将创建";"空";行
- 将TMP合并到DST
- 然后将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