Быстрый способ удалить сразу все строки данных
Я хочу удалить все строки в datatable.
Я использую что-то вроде этого:
foreach (DataRow row in dt.Rows)
{
row.Delete();
}
TableAdapter.Update(dt);
Он работает хорошо, но требуется много времени, если у меня много строк.
Есть ли способ удалить все строки сразу?
Ответы
Ответ 1
Если вы используете свой код для базы данных sqlserver,
используйте эту команду
string sqlTrunc = "TRUNCATE TABLE " + yourTableName
SqlCommand cmd = new SqlCommand(sqlTrunc, conn);
cmd.ExecuteNonQuery();
это будет самый быстрый метод и удалит все из вашей таблицы и reset счетчик идентичности с нулем.
Ключевое слово TRUNCATE поддерживается и другими СУБД.
5 лет спустя:
Оглядываясь назад на этот ответ, мне нужно что-то добавить. Ответ выше хорош только в том случае, если вы абсолютно уверены в источнике значения в переменной yourTableName. Это означает, что вы не должны получать это значение от своего пользователя, потому что он может вводить что угодно, и это приводит к проблемам с Sql Injection, хорошо описанным в этой знаменитой комикс. Всегда предлагайте вашему пользователю выбор между жестко закодированными именами (таблицами или другими символическими значениями) с использованием не редактируемого интерфейса.
Ответ 2
Как упоминалось, просто используйте:
dt.Rows.Clear()
Ответ 3
Это позволит вам очистить все строки и сохранить формат DataTable
.
dt.Rows.Clear();
Существует также
dt.Clear();
Однако вызов Clear()
на DataTable
(dt
) удалит столбцы и форматирование из DataTable.
Per код, найденный в вопросе 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);
}
}
}
}
Ответ 4
Почему вы просто не делаете это в SQL?
DELETE FROM SomeTable
Ответ 5
Это самый простой способ удалить все строки из таблицы в dbms через DataAdapter
. Но если вы хотите сделать это в одной партии, вы можете установить DataAdapter UpdateBatchSize
на 0 (неограниченный).
Другим способом было бы использовать простой 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.
Ответ 6
Просто используйте dt.Clear()
Также вы можете установить, чтобы ваш TableAdapter/DataAdapter очистился, прежде чем он заполнит данные.
Ответ 7
Если вы действительно обеспокоены скоростью и не беспокоитесь о данных, вы можете сделать Truncate. Но это предполагает, что ваш DataTable находится в базе данных, а не только в объекте памяти.
TRUNCATE TABLE tablename
Разница заключается в том, что это удаляет все строки, не записывая удаленные строки, делая транзакцию быстрее.
Ответ 8
Здесь у нас есть тот же вопрос. Вы можете использовать следующий код:
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
Ответ 9
Я использую MDaf, просто использую этот код:
DataContext db = new DataContext(ConfigurationManager.ConnectionStrings["con"].ConnectionString);
db.TruncateTable("TABLE_NAME_HERE");
//or
db.Execute("TRUNCATE TABLE TABLE_NAME_HERE ");
Ответ 10
Есть ли метод Clear() в классе DataTable?
Я думаю, что есть. Если есть, используйте это.
Ответ 11
Datatable.clear()
метод из класса DataTable