Una forma rápida de eliminar todas las filas de una tabla de datos a la vez
Quiero eliminar todas las filas de una tabla de datos. Yo uso algo como esto:
foreach (DataRow row in dt.Rows)
{
row.Delete();
}
TableAdapter.Update(dt);
Funciona bien pero lleva mucho tiempo si tengo muchas filas. ¿Hay alguna forma de eliminar todas las filas a la vez?
Si está ejecutando su código en una base de datos SQLServer,
utilice este comando
string sqlTrunc = "TRUNCATE TABLE " + yourTableName
SqlCommand cmd = new SqlCommand(sqlTrunc, conn);
cmd.ExecuteNonQuery();
Este será el método más rápido y eliminará todo de su mesa y restablecerá el contador de identidad a cero.
La palabra clave TRUNCATE también es compatible con otros RDBMS.
5 años después:
mirando hacia atrás en esta respuesta, necesito agregar algo. La respuesta anterior es buena sólo si está absolutamente seguro de la fuente del valor en la variable yourTableName . Esto significa que no deberías obtener este valor de tu usuario porque puede escribir cualquier cosa y esto lleva a problemas de inyección Sql bien descritos en esta famosa tira cómica . Presente siempre a su usuario la posibilidad de elegir entre nombres codificados (tablas u otros valores simbólicos) utilizando una interfaz de usuario no editable.
Esto le permitirá borrar todas las filas y mantener el formato del archivo DataTable
.
dt.Rows.Clear();
También hay
dt.Clear();
Sin embargo, al llamar Clear()
a DataTable
( dt
) se eliminarán las columnas y el formato de la tabla de datos.
Según el código que se encuentra en una pregunta de MSDN , se llama a un método interno tanto mediante DataRowsCollection
como con un parámetro DataTable
diferente :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);
}
}
}
}
Como alguien mencionó, simplemente use:
dt.Rows.Clear()