如何在没有循环的情况下从VB.NET 2008中的数据表中删除多行?
Select
方法以及Remove
,并且也在方法中删除。但是这需要循环来从数据表中删除行。我有40000行,我想从该数据表中删除选定的1000行。
答案 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';
}