首页 文章

如何获取大型sharepoint列表项(> 10000)并将其写入文本文件

提问于
浏览
1

我的SharePoint网站有一个包含大数据的大型列表我必须获取所有项目并在gridview中显示它们吗?我使用下面的代码并得到以下错误

"The attempted operation is prohibited because it exceeds the list view threshold enforced by the administrator"

private void GetData()
    {
        using (SPSite site = new SPSite("URL"))
        {
            using (SPWeb web = site.OpenWeb())
            {
                SPList list = web.Lists.TryGetList("BulkData");

                if (list != null)
                {
                    SPQuery query = new SPQuery();
                    query.Query = "<Where><IsNotNull><FieldRef Name=\"Title\" /></IsNotNull></Where>";
                    query.QueryThrottleMode = SPQueryThrottleOption.Override;
                    SPListItemCollection items = list.GetItems(query);
                    int itemCount = items.Count;
                    StringBuilder sb = new StringBuilder();
                    string str1 = string.Empty;
                    foreach (SPListItem item in items)
                    {
                        int i = 1;
                        sb.Append("\r\n").Append(Convert.ToString(item["Title"])).Append("\r\n");
                        i++;
                    }
                    Log(sb);
                }
            }
        }
    }

region日志文件

public void Log(StringBuilder ErrorMessage)
    {

        string LogFileTime = DateTime.Now.ToString("ddMMyyyyHHmmss");
        string LogFilePath = Server.MapPath(@"~\\Logs\");
        if (!File.Exists(LogFilePath + "BulkData" + LogFileTime + ".txt"))
        {
            var LogFileName = File.Create(LogFilePath + "BulkData" + LogFileTime + ".txt");
            var WriteToLogFile = new StreamWriter(LogFileName);
            WriteToLogFile.Write(ErrorMessage);
            WriteToLogFile.Close();
            LogFileName.Close();
        }


    }
    #endregion

3 回答

  • 1

    您必须在Central Admin中修改 List View threshold ,默认情况下设置为5000个元素 .

    为了最大限度地减少数据库争用,SQL Server通常使用行级锁定作为策略来确保准确更新,而不会对访问其他行的其他用户产生负面影响 .

    但是,如果读取或写入数据库操作(例如查询)导致一次锁定超过5,000行,那么SQL Server会更有效地将锁定临时升级到整个表,直到数据库操作完成 .

    enter image description here

    MSDN上查看此链接

    请参阅此链接以获取instructions step-by-step

    但是,如果您必须通过代码更改此值,则可以

    SPQuery q1 = new SPQuery();
    q1.QueryThrottleMode = SPQueryThrottleOption.Override;
    

    警告!请记住为将运行代码的帐户授予权限 .

    有关详细信息,请参阅this link .

  • 0

    尝试使用SPQuery.RowLimit指定要提取的项目数 . (MSDN链接还有一个在多个页面中加载有限数量的项目的示例)

  • 0

    您可以使用两种不同的方法:

相关问题