我的SharePoint网站包含一个包含大数据的大型列表 我必须获取所有项目并在gridview中显示它们? 我使用下面的代码并得到以下错误
“禁止尝试的操作,因为它超出了管理员强制执行的列表视图阈值”
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);
}
}
}
}
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
答案 0 :(得分:1)
您必须修改Central Admin中的列表视图阈值,默认设置为5000个元素。
为了最大限度地减少数据库争用,SQL Server通常使用行级锁定作为策略来确保准确更新,而不会对访问其他行的其他用户产生负面影响。
但是,如果读取或写入数据库操作(例如查询)导致一次锁定超过5,000行,则SQL Server临时将锁定升级到整个表的效率会更高,直到数据库操作为止完成。
在MSDN
上查看此链接 的链接但是,如果您必须通过代码更改此值,则可以
SPQuery q1 = new SPQuery();
q1.QueryThrottleMode = SPQueryThrottleOption.Override;
小心!请记住为将运行代码的帐户授予权限。
有关详细信息,请参阅this link。
答案 1 :(得分:0)
尝试使用SPQuery.RowLimit指定要提取的项目数。 (MSDN链接还有一个在多个页面中加载有限数量项目的示例)
答案 2 :(得分:0)
您可以使用两种不同的方法: