データテーブル内のすべての行を削除したい。私は次のようなものを使用します:
foreach (DataRow row in dt.Rows)
{
row.Delete();
}
TableAdapter.Update(dt);
うまく機能しますが、行が多いと時間がかかります。すべての行を一度に削除する方法はありますか?
コードを sqlserver データベースに対して実行している場合は、
このコマンドを使用します
string sqlTrunc = "TRUNCATE TABLE " + yourTableName
SqlCommand cmd = new SqlCommand(sqlTrunc, conn);
cmd.ExecuteNonQuery();
これは最速の方法であり、テーブルからすべてを削除し、ID カウンターをゼロにリセットします。
TRUNCATE キーワードは、他の RDBMS でもサポートされています。
5年後:
この回答を振り返って、何かを追加する必要があります。上記の答えは、 yourTableName変数の値のソースについて完全に確信がある場合にのみ有効です。これは、ユーザーからこの値を取得してはならないことを意味します。ユーザーは何でも入力できるため、この有名なコミック ストリップで説明されている SQL インジェクションの問題が発生する可能性があります。編集不可能な UI を使用して、ハードコーディングされた名前 (テーブルまたはその他の記号値) の選択肢を常にユーザーに提示します。
これにより、すべての行をクリアし、の形式を維持できますDataTable
。
dt.Rows.Clear();
もあります
dt.Clear();
Clear()
ただし、DataTable
( )を呼び出すdt
と、DataTableから列と書式が削除されます。
MSDNの質問で見つかったコードごとに、内部メソッドがとの両方で呼び出され、DataRowsCollection
パラメーターDataTable
が異なりboolean
ます。
internal void Clear(bool clearAll)
{
if (clearAll) // true is sent from the Data Table call
{
for (int i = 0; i < this.recordCapacity; i++)
{
this.rows[i] = null;
}
int count = this.table.columnCollection.Count;
for (int j = 0; j < count; j++)
{
DataColumn column = this.table.columnCollection[j];
for (int k = 0; k < this.recordCapacity; k++)
{
column.FreeRecord(k);
}
}
this.lastFreeRecord = 0;
this.freeRecordList.Clear();
}
else // False is sent from the DataRow Collection
{
this.freeRecordList.Capacity = this.freeRecordList.Count + this.table.Rows.Count;
for (int m = 0; m < this.recordCapacity; m++)
{
if ((this.rows[m] != null) && (this.rows[m].rowID != -1))
{
int record = m;
this.FreeRecord(ref record);
}
}
}
}
誰かが言ったように、ただ使用してください:
dt.Rows.Clear()
これは、 を介して dbms のテーブルからすべての行を削除する最も簡単な方法DataAdapter
です。ただし、1 つのバッチで実行する場合は、DataAdapterUpdateBatchSize
を 0 (無制限) に設定できます。
もう 1 つの方法は、単純なSqlCommand
CommandTextを使用することDELETE FROM Table
です。
using(var con = new SqlConnection(ConfigurationSettings.AppSettings["con"]))
using(var cmd = new SqlCommand())
{
cmd.CommandText = "DELETE FROM Table";
cmd.Connection = con;
con.Open();
int numberDeleted = cmd.ExecuteNonQuery(); // all rows deleted
}
DataRows
しかし、代わりにからを削除したい場合はDataTable
、 を呼び出すだけDataTable.Clear
です。これにより、dbms で行が削除されなくなります。
SQLでそれをやらないのはなぜですか?
DELETE FROM SomeTable
使うだけdt.Clear()
また、データでいっぱいになる前に、TableAdapter/DataAdapter をクリアするように設定することもできます。
速度を本当に気にし、データを気にしない場合は、Truncate を実行できます。ただし、これは、DataTable が単なるメモリ オブジェクトではなく、データベース上にあることを前提としています。
TRUNCATE TABLE tablename
違いは、行の削除をログに記録せずにすべての行を削除して、トランザクションを高速化することです。
ここで同じ質問があります。次のコードを使用できます。
SqlConnection con = new SqlConnection();
con.ConnectionString = ConfigurationManager.ConnectionStrings["yourconnectionstringnamehere"].ConnectionString;
con.Open();
SqlCommand com = new SqlCommand();
com.Connection = con;
com.CommandText = "DELETE FROM [tablenamehere]";
SqlDataReader data = com.ExecuteReader();
con.Close();
ただし、次のコードをプロジェクトにインポートする前に:
using System.Configuration;
using System.Data.SqlClient;
これは、テーブルであるすべての行を削除できるコードの特定の部分です。
DELETE FROM [tablenamehere]
これはあなたのテーブル名でなければなりません: tablenamehere
- これはテーブル内のすべての行を削除できます:DELETE FROM
MDafを使用している場合は、次のコードを使用します。
DataContext db = new DataContext(ConfigurationManager.ConnectionStrings["con"].ConnectionString);
db.TruncateTable("TABLE_NAME_HERE");
//or
db.Execute("TRUNCATE TABLE TABLE_NAME_HERE ");
DataTable クラスに Clear() メソッドはありますか??
あると思います。あるなら、それを使ってください。
Datatable.clear()
クラスDataTableのメソッド