rowstate プロパティ値が Deleted のデータテーブルからすべての行を削除したい。
DataTable dt;
dt.Clear(); // this will not set rowstate property to delete.
現在、すべての行を繰り返し処理し、各行を削除しています。
効率的な方法はありますか?SQL Server で削除したくない DataTable メソッドを使用したい。
rowstate プロパティ値が Deleted のデータテーブルからすべての行を削除したい。
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); }
}
これにより、「delete」などの FK カスケード関係が満たされます (DataTable.Clear() はそうではありません)。
DataTable dt = ...;
// Remove all
while(dt.Count > 0)
{
dt.Rows[0].Delete();
}
dt.Rows.Clear();
dt.Columns.Clear(); //warning: All Columns delete
dt.Dispose();
私は通常、次のSQLコマンドを実行します。
DELETE FROM TABLE WHERE ID>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 のソリューションが脆弱な無限ループのバグはここでは問題になりません。
テーブル内のすべての行を削除するストアド プロシージャを SQL Server db に作成し、C# コードから実行してから、データ テーブルを再クエリすることができます。
SQL Server データベースを使用しているため、単純に SQL コマンドを実行することをお勧めします"DELETE FROM " + dt.TableName
。
テーブルを削除します。すべてを削除する最速の方法です。次に、テーブルを再作成します。