Подтвердить что ты не робот

Быстрый способ удалить сразу все строки данных

Я хочу удалить все строки в datatable. Я использую что-то вроде этого:

foreach (DataRow row in dt.Rows)
{
  row.Delete();
}
TableAdapter.Update(dt);

Он работает хорошо, но требуется много времени, если у меня много строк. Есть ли способ удалить все строки сразу?

4b9b3361

Ответ 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