一次删除数据表的所有行的快速方法

我想删除数据表中的所有行。 我使用这样的东西:

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(); 

这将是最快的方法,将删除表中的所有内容并将身份计数器重置为零。

其他RDBMS也支持TRUNCATE关键字。

5年后:
回顾这个答案,我需要添加一些东西。 只有当您完全确定yourTableName变量中值的来源时,上面的答案才是好的。 这意味着你不应该从你的用户那里获得这个值,因为他可以输入任何内容,这会导致在这个着名的漫画中很好地描述的Sql Injection问题。 始终使用不可编辑的UI为您的用户提供硬编码名称(表格或其他符号值)之间的选择。

正如有人提到的,只需使用:

 dt.Rows.Clear() 

这将允许您清除所有行并保持DataTable的格式。

 dt.Rows.Clear(); 

还有

 dt.Clear(); 

但是,在DataTabledt Clear()上调用Clear()将从DataTable中删除列和格式。

在MSDN问题中找到的每个代码 , DataRowsCollectionDataTable使用不同的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); } } } } 

这是通过DataAdapter从dbms中删除表中所有行的最简单方法。 但是,如果您想在一个批处理中执行此操作,则可以将DataAdapter的UpdateBatchSize设置为0(无限制)。

另一种方法是使用带有CommandText DELETE FROM Table的简单SqlCommand

 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 } 

但是,如果您只想从DataTable删除DataRows ,则只需调用DataTable.Clear 。 这样可以防止在dbms中删除任何行。

为什么不在SQL中执行此操作?

 DELETE FROM SomeTable 

只需使用dt.Clear()

您还可以在填充数据之前将TableAdapter / DataAdapter设置为清除。

如果您真的关心速度而不担心数据,可以执行截断操作。 但这是假设您的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类的Datatable.clear()方法