当前位置: 首页>>建站开发>>正文


使用C#删除所有项目的最快方法

webfans 建站开发 , 去评论

问题描述

Possible Duplicate:
Deleting all the items from a large list in SharePoint

以编程方式删除列表中所有项目的最快方法是什么?我不想删除列表和re-create它,但我需要摆脱所有项目。

我现在的方式,使用控制台应用程序:

SPList list = mWeb.GetList(strUrl);
if (list != null)
{
    for (int i = list.ItemCount - 1; i >= 0; i--)
    {
        list.Items[i].Delete();
    }
    list.Update();
}

最佳解决办法

删除所有项目的最快方法是将所有删除命令批处理…

public static void DeleteAllItems(string site, string list)
{
    using (SPSite spSite = new SPSite(site))
    {
        using (SPWeb spWeb = spSite.OpenWeb())
        {
            StringBuilder deletebuilder = BatchCommand(spWeb.Lists[list]);
            spSite.RootWeb.ProcessBatchData(deletebuilder.ToString());
        }
    }
}

private static StringBuilder BatchCommand(SPList spList)
{
    StringBuilder deletebuilder= new StringBuilder();
    deletebuilder.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Batch>");
    string command = "<Method><SetList Scope=\"Request\">" + spList.ID +
        "</SetList><SetVar Name=\"ID\">{0}</SetVar><SetVar Name=\"owsfileref\">{1}</SetVar><SetVar Name=\"Cmd\">Delete</SetVar></Method>";

    foreach (SPListItem item in spList.Items)
    {
        deletebuilder.Append(string.Format(command, item.ID.ToString(),item["FileRef"].ToString()));
    }
    deletebuilder.Append("</Batch>");
    return deletebuilder;
}

次佳解决办法

取决于您的意思是执行速度最快还是最快速编码并开始工作。

如上所述,批处理方法执行速度最快,否则按照您的方式执行,这样会更快:

while(list.Items.Count > 0) 
{ 
  list.Items[0].Delete(); 
}

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2183.html,转载请务必附带本地址声明。