我想删除数据表中的所有行。 我使用这样的东西:
foreach (DataRow row in dt.Rows)
{
row.Delete();
}
TableAdapter.Update(dt);
它运作良好但如果我有很多行需要很多时间。 有没有办法一次删除所有行?
答案 0 :(得分:25)
如果您正在针对sqlserver数据库运行代码,那么就是 使用此命令
string sqlTrunc = "TRUNCATE TABLE " + yourTableName
SqlCommand cmd = new SqlCommand(sqlTrunc, conn);
cmd.ExecuteNonQuery();
这将是最快的方法,将从表中删除所有内容并将身份计数器重置为零。
其他RDBMS也支持TRUNCATE关键字。
5年后:
回顾这个答案,我需要添加一些东西。只有当您完全确定 yourTableName 变量中的值的来源时,上面的答案才是好的。这意味着您不应该从用户那里获取此值,因为他可以键入任何内容,这会导致this famous comic strip中详细描述的Sql Injection问题。始终使用不可编辑的UI为用户提供硬编码名称(表格或其他符号值)之间的选择。
答案 1 :(得分:10)
这将允许您清除所有行并保持DataTable
的格式。
dt.Rows.Clear();
还有
dt.Clear();
但是,在Clear()
(DataTable
)上调用dt
会从DataTable中删除列和格式。
根据code found in an MSDN question,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);
}
}
}
}
答案 2 :(得分:8)
正如有人提到的那样,只需使用:
dt.Rows.Clear()
答案 3 :(得分:4)
这是通过DataAdapter
从dbms中删除表中所有行的最简单方法。但如果您想在一个批处理中执行此操作,则可以将DataAdapter的UpdateBatchSize
设置为0(无限制)。
另一种方法是使用带有CommandText SqlCommand
的简单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中删除任何行。
答案 4 :(得分:2)
为什么不在SQL中执行此操作?
DELETE FROM SomeTable
答案 5 :(得分:1)
只需使用dt.Clear()
此外,您可以在填充数据之前将TableAdapter / DataAdapter设置为清除。
答案 6 :(得分:0)
如果您真的关心速度而不担心数据,可以执行截断操作。但这是假设您的DataTable位于数据库而不仅仅是内存对象。
TRUNCATE TABLE tablename
不同之处在于删除所有行而不记录行删除,从而使事务更快。
答案 7 :(得分:0)
Here我们有同样的问题。您可以使用以下代码:
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
答案 8 :(得分:0)
我使用MDaf只使用此代码:
DataContext db = new DataContext(ConfigurationManager.ConnectionStrings["con"].ConnectionString);
db.TruncateTable("TABLE_NAME_HERE");
//or
db.Execute("TRUNCATE TABLE TABLE_NAME_HERE ");
答案 9 :(得分:0)
这是使用Entity FW且没有SQL Injection或TSQL的一种干净现代的方法。
using (Entities dbe = new Entities())
{
dbe.myTable.RemoveRange(dbe.myTable.ToList());
dbe.SaveChanges();
}
答案 10 :(得分:-1)
DataTable类上是否有Clear()方法??
我认为有。如果有,请使用它。
答案 11 :(得分:-2)
Datatable.clear()
方法