.net 查询SharePoint数据的最佳方式是什么?

.net 查询SharePoint数据的最佳方式是什么?,.net,sharepoint,.net,Sharepoint,我应该使用ADO.NET直接访问数据库中的底层数据,还是.NET有更好的方法来实现这一点 我目前正在使用SharePoint 2007,但我们即将进入2010年。我正在使用Visual Studio 2010。我强烈建议使用SharePoint对象访问数据(SP*类,或使用SharePoint web services、LINQ to SharePoint等) 不要使用纯ADO.NET直接访问底层数据库。主要原因是,通过使用受支持的(官方)数据访问方式,可以降低引发问题的风险。例如,在更改表中的

我应该使用ADO.NET直接访问数据库中的底层数据,还是.NET有更好的方法来实现这一点


我目前正在使用SharePoint 2007,但我们即将进入2010年。我正在使用Visual Studio 2010。

我强烈建议使用SharePoint对象访问数据(SP*类,或使用SharePoint web services、LINQ to SharePoint等)

不要使用纯ADO.NET直接访问底层数据库。主要原因是,通过使用受支持的(官方)数据访问方式,可以降低引发问题的风险。例如,在更改表中的数据时,您不知道数据库中的另一个表是否也必须更新。SharePoint对象将为您处理这些问题


另外,我认为,如果Microsoft直接访问数据库,则不会支持SharePoint代码出现问题,并且在任何热修复或SP发布后,您的代码可能无法执行,因为Microsoft可能随时更改数据库结构

您是在谈论自定义数据库还是Sharepoint数据库

您不应直接接触sharepoint数据库,因为它将使您的服务器场处于不受支持的状态

如果您想访问自定义数据库,请考虑使用实体框架:


这取决于上下文。回答以下问题将帮助您做出前进的最佳选择

什么类型的数据?

列出一个站点的数据?使用Web服务

跨网站集聚合内容?使用服务器对象模型

我想用这些数据做什么?

在简单的Web部件中显示摘要?考虑使用CQWP(内容查询Web部件)或DVWP(Data VIEW WebPoT)

我提供此解决方案的时间表是什么?


如果您以前没有执行过SharePoint自定义代码部署,而且时间紧迫,请努力坚持使用web服务api。

您绝对不应该直接访问SharePoint内容数据库


有一个搜索web服务,您可以使用它来获取项目或列表web服务,使您能够轻松地提取数据。如果您在SharePoint中托管代码,请使用SharePoint对象模型。获取所需内容非常简单。

正如其他人所说,不要直接接触数据库。微软不会支持它,即使他们支持,数据库结构也没有文档记录,而且比您第一次打开它时看起来更复杂

SharePoint对象模型中有许多对象。但是,如果您试图查询列表,其中一些特别有用。我会给你一个简短的清单,我认为你应该从什么开始。一旦您熟悉了这些功能以及它们在SharePoint中所代表的内容,您将很快找到其他功能(通过您使用的函数返回的内容或通过MSDN)

1

可能是你最终要处理的类型。SPList表示任何类型的SharePoint列表。这是一个文档库、一个调查、一个图片库,或者任何您可以创建的自定义列表。SharePoint中几乎所有内容都是一个列表,从用户信息列表(用于身份验证)到博客(博客条目列表)。 列表中的项目是
SPListItem

2。和

现在这有点让人困惑,但是SPSite代表一个网站集,而SPWeb代表一个网站。假设您在hXXp://SharePointSite.com上有一个SharePoint网站,那么网站集(SPSite)将是hXXp://SharePointSite.com,SPWeb将是hXXp://SharePointSite.com/blog或hXXp://SharePointSite.com/about 基本上,网站集是SPWeb的集合,它是SPList(以及其他您不关心的东西)的集合。SPList总是存在于web中

3

这是SharePoint的SQL。虽然有一种方法可以做到(但如果你打算搬到2010年,我不会为此烦恼),但有时你仍然需要使用这个方法。您可以随时使用SPQuery从列表中提取项目。 有时,在列表中的所有项上循环:
foreach(SPList.items中的项)
是可以的,但是当列表变大时,您需要使用SPQuery查询它们(与SQL/ADO完全相同)

把它们放在一个例子中。假设你的网站上有一张名单,你想知道谁是18岁。您的代码如下所示:

    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.
            }
        }
    }
使用(SPSite站点=新SPSite(“http://sharepointsite.com"))
{
使用(SPWeb=site.RootWeb)
{
SPList peopleList=web.Lists[“People”];
SPQuery query=新建SPQuery();
查询。查询=
"" +
"" +
"18" +
"" +
"";
SPListItemCollection items=peopleList.GetItems(查询);
foreach(项目中的SPListItem项目)
{
//这里的项目代表一个18岁的人。
}
}
}
用于生成SPQuery的丑陋语言(或标记)称为CAML。当你需要帮助时,你可以在谷歌上寻求帮助,但要开始你可以阅读,这解释了很多。这是一个帮助我构建查询的工具:


顺便说一下,虽然可以通过web服务查询列表,但我建议不要这样做。如果您可以在安装了SharePoint的计算机上运行代码,那么对象模型比web服务更好/更直观,web服务仅在未安装SharePoint时作为替代品存在。只有在必要时才使用它们。他们返回的数据是XML格式的,格式很麻烦。也没有那么多可用的功能。

太棒了。推荐任何链接来获得我