3

rowstate プロパティ値が Deleted のデータテーブルからすべての行を削除したい。

DataTable dt;
dt.Clear(); // this will not set rowstate property to delete.

現在、すべての行を繰り返し処理し、各行を削除しています。

効率的な方法はありますか?SQL Server で削除したくない DataTable メソッドを使用したい。


4

8 に答える 8

5

この方法を使用しています:

for(int i = table.Rows.Count - 1; i >= 0; i--) {
    DataRow row = table.Rows[i];
    if ( row.RowState == DataRowState.Deleted ) { table.Rows.RemoveAt(i); }
}
于 2011-04-19T12:04:29.673 に答える
3

これにより、「delete」などの FK カスケード関係が満たされます (DataTable.Clear() はそうではありません)。

DataTable dt = ...;
// Remove all
while(dt.Count > 0)
{
     dt.Rows[0].Delete();
}
于 2012-01-20T17:00:53.760 に答える
2
dt.Rows.Clear();
dt.Columns.Clear();   //warning: All Columns delete
dt.Dispose();
于 2015-08-20T14:02:14.133 に答える
0

私は通常、次のSQLコマンドを実行します。

DELETE FROM TABLE WHERE ID>0
于 2011-04-21T09:36:00.803 に答える
0

これは、ホルヘの答えからインスピレーションを得て、この質問を検索した後、自分のコードで解決した解決策です。

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 が Deleted に設定されるようにします。

また、使用されていないため、列挙中にコレクションを変更しても InvalidOperationExceptionforeachは発生しません。ただし、DataRowState が既に Deleted に設定されている DataRow を超えてコードがインクリメントされるため、Jorge のソリューションが脆弱な無限ループのバグはここでは問題になりません。

于 2012-03-26T16:46:10.383 に答える
0

テーブル内のすべての行を削除するストアド プロシージャを SQL Server db に作成し、C# コードから実行してから、データ テーブルを再クエリすることができます。

于 2011-04-19T15:04:23.290 に答える
0

SQL Server データベースを使用しているため、単純に SQL コマンドを実行することをお勧めします"DELETE FROM " + dt.TableName

于 2011-04-19T13:14:30.600 に答える
0

テーブルを削除します。すべてを削除する最速の方法です。次に、テーブルを再作成します。

于 2011-04-19T14:31:47.123 に答える