如何在VB.NET 2008中从数据表中删除多行?

时间:2010-05-06 06:55:30

标签: vb.net ado.net

如何在没有循环的情况下从VB.NET 2008中的数据表中删除多行?

  • 我不想从数据库中删除。
  • 我想从本地数据表中删除。
  • 我知道Select方法以及Remove,并且也在方法中删除。但是这需要循环来从数据表中删除行。

我有40000行,我想从该数据表中删除选定的1000行。

10 个答案:

答案 0 :(得分:11)

我不知道这可以直截了当地完成。数据表上没有删除命令可以执行此操作。

你可以尝试这样的事情。您可以选择要保留在临时表中的记录,清除原始表,然后将临时表合并回原始表。

Dim dtTemp As DataTable = ds.Tables("YourTable").Select("RecordsToKeep='This'").CopyToDataTable
ds.Tables("YourTable").Clear()
ds.Tables("YourTable").Merge(dtTemp)
dtTemp.Dispose()

这是我能想到的问题的最佳答案。您似乎可能以不寻常的方式使用数据表。您通常最好不要开始填充记录,或者在将内容保存到目的地时将其过滤掉。无论是XML文件,SQL还是其他什么。

当然,循环方法效率最高。这可能不是最快的方法,但只有4K行,它可能已经足够了。

答案 1 :(得分:0)

如果要删除所有行,可以在数据表上使用Clear方法。

答案 2 :(得分:0)

dt.Rows.RemoveAt(0)
dt.Rows.RemoveAt(1)

答案 3 :(得分:0)

在某些情况下,我们总是可以编写存储过程来优化ADO.NET实体框架或LINQ to SQL往返。缺点是该模型开始看起来有点不一致。 我也想知道是否有更好的方法:)

答案 4 :(得分:0)

如果您使用的是DeleteAllOnSubmit(),则可以致电LINQ to SQL。但是,这将为每个被删除的实体提交DELETE语句,这是非常低效的。您可以始终fork LINQ to SQL,或使用存储过程。

顺便说一下,你的问题非常通用。我的第一个倾向是建议使用WHERE子句。

答案 5 :(得分:0)

可能是使用DataView会做出一招。例如,您可以过滤掉要保留到DataView中的行,将视图转换为表并配置初始表。然后你的桌子上有你需要的行。

Dim view As DataView = YourTable.DefaultView            
view.RowFilter = "YourFilterColumn = 1259"
Dim tblNew as Datatable = view.ToTable
YourTable.Dispose

让我知道它是否适合你。

答案 6 :(得分:0)

在ADO.NET命令对象中使用SQL语句。很明显,您要删除的行将有一些共同点。

Delete From MyTable where mycolumn='XYZ' and thisColumn='ABC'

答案 7 :(得分:0)

我不确定这是否正式合格使用循环,但这是使用LINQ的解决方案:

dt.BeginLoadData();
( from row in dt.AsEnumerable()
  where row.Field<string>( "MyColumn"  ) == "DeleteValue"
  select row ).ToList().ForEach( row => row.Delete() );
dt.EndLoadData();
dt.AcceptChanges();

TBH,我不确定是否有办法在没有在某个级别循环行的情况下执行此操作。您可以遍历删除不需要的行的行,也可以创建一个新表,其中包含除了您不想要的行之外的所有内容。但是,应该注意的是,即使在后一种情况下,NET可能会循环遍历行以确定该行是否应包含在保持器表中。

答案 8 :(得分:0)

我认为你应该使用LINQ。您将从数据集中获取数据表,并编写LINQ查询以删除符合条件的行。

所以你不需要为此循环。

以下是一些可能对您有帮助的链接。

答案 9 :(得分:0)

谢谢Bremer,这是删除数据表行的最佳代码,对我来说是快速的方法:

if (mysqli_query($link, $SaveData)) {
    $LastInsertedID = mysqli_insert_id($link);
    $response['userId'] = $LastInsertedID;
} else {
    $response['status'] = 'error';
}