我应该直接使用ADO.NET访问数据库中的基础数据,还是.NET有更好的方法来实现这一点?
我目前正在使用SharePoint 2007,但我们即将升级到2010。我使用的是Visual Studio 2010。
我应该直接使用ADO.NET访问数据库中的基础数据,还是.NET有更好的方法来实现这一点?
我目前正在使用SharePoint 2007,但我们即将升级到2010。我使用的是Visual Studio 2010。
这取决于上下文。回答以下问题将帮助您做出最佳选择以继续前进。
数据类型是什么?
从一个站点列出数据?使用Web服务
跨站点集合聚合内容?使用服务器对象模型
我想用这些数据做什么?
在简单的Web部件中显示摘要?考虑使用CQWP(内容查询WebPart)或DVWP(数据视图Webpart)
我交付此解决方案的时间表是什么?
如果您以前没有进行过SharePoint自定义代码部署,并且时间紧迫,请尽力坚持使用Web服务API。
就像其他人所说,不要直接触碰数据库。微软不会提供支持,即使他们这么做了,数据库结构也没有记录,并且比您第一次打开时看起来更复杂。
SharePoint对象模型中有很多对象。但是,如果要查询列表,则其中一些对象特别有用。我将为您提供一个简短的列表,以便您开始使用它们。一旦您熟悉这些对象在SharePoint中代表的内容,通过使用的函数返回或通过MSDN,您会很快找到其他对象。
1. SPList
可能是您最经常处理的类型。SPList代表任何类型的SharePoint列表。那是文档库、调查、图片库或任何自定义列表。几乎所有在SharePoint中的事情都是一个列表,从用户信息列表(用于身份验证)到博客(博客条目的列表)。
列表中的项目为SPListItem
现在这可能有点令人困惑,但SPSite表示网站集合,而SPWeb表示单个网站。 假设您在hXXp://SharePointSite.com上有一个SharePoint站点,那么网站集合(SPSite)将是hXXp://SharePointSite.com,而SPWeb将是hXXp://SharePointSite.com/blog或hXXp://SharePointSite.com/about。
基本上,网站集合是SPWeb的集合,它们是SPList(以及其他您不关心的东西)的集合。 SPList始终驻留在网站中。
3. SPQuery
这是SharePoint的SQL。虽然有一种方法可以在2010年使用LINQ 2 SharePoint(甚至在2007年也可以),但如果您即将转移到2010年,我不会费心去做它。但有时仍需要使用它。每当您想从列表中提取项目时,都要使用SPQueries。有时,循环遍历列表中的所有项目:foreach(item in SPList.Items)
是可以的,但当列表变得更大时,您将希望使用SPQuery进行查询(与SQL / ADO相同)。 using(SPSite site = new SPSite("http://sharepointsite.com"))
{
using (SPWeb web = site.RootWeb)
{
SPList peopleList = web.Lists["People"];
SPQuery query = new SPQuery();
query.Query =
"<Where>" +
"<Eq>" +
"<FieldRef Name='Age'/><Value Type='Number'>18</Value>" +
"</Eq>" +
"</Where>";
SPListItemCollection items = peopleList.GetItems(query);
foreach(SPListItem item in items)
{
//item here represents a person who's 18 years old.
}
}
}
用于创建SPQuery的丑陋语言(或标记)称为CAML。当您需要帮助时,可以通过谷歌搜索来获取信息,但是为了让您开始入门,您可以阅读this article,其中解释了很多内容。这是我用来帮助构建查询的工具:U2U CAML Builder。
顺便说一句,虽然可以通过Web服务查询列表,但我建议不要这样做。如果您可以在安装了SharePoint的计算机上运行代码,则对象模型比Web服务更好/更直观,而Web服务仅作为替代品存在,当未安装SharePoint时才使用它们。它们返回的数据是XML格式,格式化很麻烦。也没有那么多可用的函数。