我的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 回答
您必须在Central Admin中修改 List View threshold ,默认情况下设置为5000个元素 .
为了最大限度地减少数据库争用,SQL Server通常使用行级锁定作为策略来确保准确更新,而不会对访问其他行的其他用户产生负面影响 .
但是,如果读取或写入数据库操作(例如查询)导致一次锁定超过5,000行,那么SQL Server会更有效地将锁定临时升级到整个表,直到数据库操作完成 .
在MSDN上查看此链接
请参阅此链接以获取instructions step-by-step
但是,如果您必须通过代码更改此值,则可以
警告!请记住为将运行代码的帐户授予权限 .
有关详细信息,请参阅this link .
尝试使用SPQuery.RowLimit指定要提取的项目数 . (MSDN链接还有一个在多个页面中加载有限数量的项目的示例)
您可以使用两种不同的方法:
ContentIterator object - 在SharePoint Foundation中不可用
SPWeb.ProcessBatchData with Display方法 - 在SP Foundation中可用,但非常复杂,因为它非常复杂 .