我想删除数据表中的所有行.我使用这样的东西:
foreach (DataRow row in dt.Rows)
{
row.Delete();
}
TableAdapter.Update(dt);
Run Code Online (Sandbox Code Playgroud)
它运作良好但如果我有很多行需要很多时间.有没有办法一次删除所有行?
Ste*_*eve 26
如果您正在针对sqlserver数据库运行代码,请
使用此命令
string sqlTrunc = "TRUNCATE TABLE " + yourTableName
SqlCommand cmd = new SqlCommand(sqlTrunc, conn);
cmd.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
这将是最快的方法,将删除表中的所有内容并将身份计数器重置为零.
其他RDBMS也支持TRUNCATE关键字.
5年后:
回顾这个答案,我需要补充一些东西.只有当您完全确定yourTableName变量中值的来源时,上面的答案才是好的.这意味着你不应该从用户那里获得这个值,因为他可以输入任何东西,这会导致这个着名漫画中描述的Sql Injection问题.始终使用不可编辑的UI为您的用户提供硬编码名称(表格或其他符号值)之间的选择.
kri*_*gar 14
这将允许您清除所有行并保持其格式DataTable.
dt.Rows.Clear();
Run Code Online (Sandbox Code Playgroud)
还有
dt.Clear();
Run Code Online (Sandbox Code Playgroud)
但是,调用Clear()在DataTable(dt)将删除列,并从数据表格式.
在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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Kre*_*reg 10
正如有人提到的,只需使用:
dt.Rows.Clear()
Run Code Online (Sandbox Code Playgroud)
这是通过 .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
}
Run Code Online (Sandbox Code Playgroud)
但是,如果你不是仅仅要删除DataRows从DataTable,你只需要调用DataTable.Clear。这将防止在 dbms 中删除任何行。
| 归档时间: |
|
| 查看次数: |
99415 次 |
| 最近记录: |