簡體   English   中英

將空行添加到數據表

[英]Adding empty rows to a 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 來添加多行),你想使用

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

對於有很多行的表格,更好的解決方案是使用“表格預制件”。 讓我們看一個例子。 我們需要更新目標 (DST) 表的 100k 行。 我們有外部源 (SRC) 表。 我們知道 SRC 中的某些行可能不存在,這意味着該特定行的列是 DBNULL。 如果我們只是將 SRC 合並到 DST,舊數據仍將在 DST 中。 因此,為了清除該數據,我們首先需要清除將從 SRC 導入數據的列中的所有數據,並保存另一個數據(實際上是從另一個源表中獲取的)。

不推薦使用“For...Next” - 花費太多時間。 我接下來做:

  1. 創建臨時表 (TMP),其中只有 PrimaryKey 匹配 DST.PriaryKey 的列(沒有任何行)
  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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM