我想從rowatate屬性值刪除的數據表中刪除所有行。如何從數據表中刪除所有行
DataTable dt;
dt.Clear(); // this will not set rowstate property to delete.
目前我遍歷所有行並刪除每一行。
有什麼有效的方法嗎? 我不想在SQL Server中刪除我想使用DataTable方法。
我想從rowatate屬性值刪除的數據表中刪除所有行。如何從數據表中刪除所有行
DataTable dt;
dt.Clear(); // this will not set rowstate property to delete.
目前我遍歷所有行並刪除每一行。
有什麼有效的方法嗎? 我不想在SQL Server中刪除我想使用DataTable方法。
,我們正在使用這種方式:
for(int i = table.Rows.Count - 1; i >= 0; i--) {
DataRow row = table.Rows[i];
if (row.RowState == DataRowState.Deleted) { table.Rows.RemoveAt(i); }
}
我認爲這是唯一更好的方法 foreach(DataRow row in dt.Rows) { row.Delete(); } – meetjaydeep 2011-04-19 12:30:43
@meetjaydeep:如果你做foreach,你不能改變集合。但RemeoveAt()更改集合,所以foreach將拋出異常。所以這不是解決方案。 – TcKs 2011-04-19 15:29:26
由於您使用的是SQL Server數據庫,我會主張簡單地執行SQL命令"DELETE FROM " + dt.TableName
。
我想從DataTable中刪除,它應該更新行狀態。 – meetjaydeep 2011-04-19 14:45:59
使用動態sql做它是一個壞主意。 http://www.sommarskog.se/dynamic_sql.html#good_practices – ykatchou 2011-04-21 17:59:51
我會放下桌子,以最快的方式刪除一切。然後重新創建表格。
您可以在SQL Server數據庫上創建一個存儲過程,刪除表中的所有行,從您的C#代碼執行它,然後重新查詢數據表。
我tipically執行下面的SQL命令:
DELETE FROM TABLE WHERE ID>0
這將滿足任何FK級聯的關係,如 '刪除'(即DataTable.Clear()不會):
DataTable dt = ...;
// Remove all
while(dt.Count > 0)
{
dt.Rows[0].Delete();
}
我可能過早地+1了。這並不總是奏效。這容易受到無限循環的影響。看起來像.Delete()並不總是擺脫一行。它似乎只是在某些情況下將某行的RowState標記爲已刪除,而沒有實際刪除它們。這似乎與該行是直接創建還是通過數據庫調用添加相關。 – Yetti 2012-03-26 16:31:39
這裏是我在尋找這個問題後,在自己的代碼中解決的解決方案,從Jorge的答案中獲得靈感。
DataTable RemoveRowsTable = ...;
int i=0;
//Remove All
while (i < RemoveRowsTable.Rows.Count)
{
DataRow currentRow = RemoveRowsTable.Rows[i];
if (currentRow.RowState != DataRowState.Deleted)
{
currentRow.Delete();
}
else
{
i++;
}
}
這樣,您可以確保將所有行都刪除或將其DataRowState設置爲已刪除。
此外,由於在枚舉時修改集合,您將不會收到InvalidOperationException,因爲不使用foreach
。但是,Jorge的解決方案容易受到的無限循環錯誤在這裏不是問題,因爲代碼將增加到DataRow已經被設置爲已刪除的DataRow。
dt.Rows.Clear();
dt.Columns.Clear(); //warning: All Columns delete
dt.Dispose();
您需要提供更多的細節;你使用什麼數據庫,什麼語言? – CharlesB 2011-04-19 12:05:04
我正在使用C#和SQL Server數據庫。 – meetjaydeep 2011-04-19 12:31:37