查询SharePoint数据的最佳方法是什么?

时间:2010-11-30 19:34:54

标签: .net sharepoint

我是否应该使用ADO.NET直接访问数据库中的基础数据,还是.NET有更好的方法来执行此操作?

我目前正在使用SharePoint 2007,但我们即将迁移到2010年。我正在使用Visual Studio 2010。

5 个答案:

答案 0 :(得分:4)

我强烈建议使用SharePoint对象访问数据(SP *类,或使用SharePoint Web服务,LINQ to SharePoint等)。

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

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

答案 1 :(得分:1)

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

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

如果要访问自定义数据库,请考虑使用Entity Framework: http://msdn.microsoft.com/en-us/library/aa697427(VS.80).aspx

答案 2 :(得分:1)

这取决于背景。回答以下问题将帮助您做出最佳的选择。

什么类型的数据?

列出一个站点的数据?使用webservices

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

我想对数据做些什么?

在简单的webpart中显示摘要?考虑使用CQWP(内容查询WebPart)或DVWP(数据视图Webpart)

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

如果您之前没有完成SharePoint自定义代码部署,并且您处于紧迫的截止日期,请尽量坚持使用Web服务API。

答案 3 :(得分:1)

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

您可以使用搜索网络服务来获取项目,或者列表Web服务可以让您轻松地提取数据。如果要在SharePoint中托管代码,请使用SharePoint对象模型。这很简单,可以得到你需要的东西。

答案 4 :(得分:1)

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

SharePoint对象模型中有很多对象。但是,如果您尝试查询列表,其中一些特别有用。我会给你一份我认为你应该从中开始的简短清单。一旦您对这些以及它们在SharePoint中所代表的内容感到满意,您就可以立即找到其他内容(通过您使用的函数返回或通过MSDN)。

<强> 1。 SPList

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

<强> 2。 SPWebSPSite

现在这有点令人困惑,但SPSite代表网站集,而SPWeb代表单个网站。假设您在hXXp上有一个SharePoint网站://SharePointSite.com,网站集(SPSite)将是hXXp://SharePointSite.com,SPWeb将是hXXp://SharePointSite.com/blog或hXXp:// SharePointSite .COM /约 基本上,网站集是SPWeb的集合,它是SPList的集合(以及您不会关心的其他内容)。 SPList始终存在于Web中。

第3。 SPQuery

这是SharePoint的SQL。虽然有办法LINQ 2 SharePoint in 2010and even in 2007,但如果你还要搬到2010年,我也不会打扰它,你有时候仍然需要使用它。您可以在任何时候从列表中提取项目时使用SPQueries。 有时,循环列表中的所有项目:foreach(item in 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.
            }
        }
    }

用于制作SPQuery的丑陋语言(或标记)称为CAML。您可以在需要时谷歌寻求帮助,但为了让您入门,您可以阅读this article,其中解释了很多。这是我用来帮助我构建查询的工具:U2U CAML Builder

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