我很难过。在将现有功能增强到SharePoint解决方案时,我发现他们直接查询Wss_Content。知道我不应该使用该存储过程,我使用SharePoint对象模型从userName检索用户组信息。让我烦恼的是它比存储过程慢。是否有更智能/更快捷的方式来获取此信息?我们正在使用SharePoint 2007.以下大致是该功能的作用:
private string GetTitle(string userName)
{
string results = string.Empty;
try
{
SPSite spSite = new SPSite("http://devvm");
SPWeb spWeb = spSite.AllWebs[""];
SPUser user = spWeb.AllUsers["aspnetsqlmembershipprovider:" + userName];
SPGroupCollection groups = user.Groups;
results = groups[0].Name;
}
catch (Exception ex)
{
Console.WriteLine("Unable to find user" + userName);
results = "No Group Found";
}
return results;
}
和存储过程代码是:
SELECT @role=Groups.Title
FROM WSS_Content.DBO.UserInfo Info
LEFT JOIN WSS_Content.DBO.GroupMembership Membership
ON Info.tp_ID=Membership.MemberID
LEFT JOIN Wss_Content.DBO.Groups Groups
ON Membership.GroupID=Groups.ID
WHERE tp_Login='aspnetsqlmembershipprovider:' + @username
因为我在try-catch中有这个的原因是这是对另一个列表的子查询,该列表可能没有与该项关联的用户。 任何帮助都将非常感谢。
答案 0 :(得分:1)
你是如何调用该代码的?如果你在控制台应用程序中使用它,那么它会更慢,它需要在本机sharepoint上下文中使用它时启动通常是活动的支持对象。
此外,您在不丢弃对象的情况下引用SPSite和SPWeb对象,这也存在固有的性能问题。