2015-06-18 46 views
-1

如何將行從一個DataTable複製到另一個DataTable?使用DataTable.Copy()不是一個選項,因爲這會創建一個NEW DataTable並刪除任何現有的DataRows。我想要做的是將List<DataTable>中的行添加到另一個表中。有沒有辦法可以做到這一點?或者遍歷所有的表和行,並且我唯一的選擇是調用DataTable.ImportRow()如何將DataTable中的行復制到另一個DataTable中而不刪除現有行?

[更新] 好吧,這是完整的場景。我有一個有200萬條記錄的DataTable。加載它拋出System.OutOfMemoryException。所以,我決定我需要頁/批量加載它。我使用DataAdapter.FillSchema()創建目標表,僅用於加載列。之後,我使用DataAdapter.Fill()(另一個DataTable)獲得「完整記錄」,然後將其分成List<DataTable>。當使用DataTable.Merge時,會拋出以下異常:「無法啓用約束。一行或多行包含違反非空,唯一或外鍵約束的值。」

+0

你看過DataTable.Merge或DataTable.Load嗎? –

+0

DataTable.Load不是我正在尋找的,因爲我需要傳遞的是一個DataTable對象而不是IDataReader。另一方面,當我使用DataTable.Merge,錯誤'無法啓用約束。一行或多行包含違反非空,唯一或外鍵約束的值。被拋出。附加說明:目標DataTable是使用DataAdapter.FillSchema創建的。這就是爲什麼我不明白爲什麼它會拋出這樣的錯誤。 –

+0

據我所知,ImportRow是唯一的選擇。 http://stackoverflow.com/questions/12025012/c-sharp-simple-way-to-copy-or-clone-a-datarow http://www.aspdotnet-suresh.com/2013/08 /copy-add-rows-from-one-datatable-to-another-datatable.html – shanmugharaj

回答

1

我嘗試合併,因爲邁克爾說與下面的代碼和它爲我工作。

DataTable table = new DataTable(); 
table.Columns.Add("Name"); 
table.Columns.Add("Address"); 

table.Rows.Add("Shan", "ADC Street"); 

DataTable table2 = new DataTable(); 
table2.Columns.Add("Name"); 
table2.Columns.Add("Address"); 
table2.Rows.Add("Raj", "EFG Street"); 

table2.Merge(table,true); 

Console.WriteLine(table2.Rows.Count);  //2 
Console.WriteLine(table2.Rows[0]["Name"]); //Raj 
Console.WriteLine(table2.Rows[1]["Name"]); //Shan 
相關問題