Каков наилучший способ запроса данных SharePoint? - PullRequest
3 голосов
/ 30 ноября 2010

Должен ли я просто использовать ADO.NET для прямого доступа к базовым данным в базе данных или у .NET есть лучший способ сделать это?

В настоящее время я использую SharePoint 2007, но мы собираемся перейти на 2010. Я использую Visual Studio 2010.

Ответы [ 5 ]

4 голосов
/ 30 ноября 2010

Я настоятельно рекомендую использовать объекты SharePoint для доступа к данным (либо классы SP *, либо использовать веб-службы SharePoint, LINQ to SharePoint и т. Д.).

Не обращайтесь напрямую к базе данных, используя чистый ADO.NET. Основная причина в том, что, используя поддерживаемый (официальный) способ доступа к данным, вы снижаете риск возникновения проблем. Например, при изменении данных в таблице вы не знаете, существует ли обязательное требование для обновления другой таблицы в базе данных. Объекты SharePoint позаботятся об этом за вас.

Плюс, я думаю, что Microsoft не будет поддерживать проблемы с вашим кодом SharePoint, если он напрямую обращается к базе данных, и существует риск, что ваш код может не выполнить после какого-либо оперативного исправления или выпуска SP, поскольку Microsoft может изменить структуру базы данных в любое время.

1 голос
/ 01 декабря 2010

Как уже говорили другие, не трогайте базу данных напрямую.Microsoft не будет поддерживать это, и даже если они это сделают, структура базы данных не документирована и более сложна, чем кажется, когда вы впервые открываете ее.

В объектной модели SharePoint много объектов,Однако некоторые из них особенно полезны, если вы пытаетесь запросить список.Я дам вам краткий список того, с чего, я думаю, вы должны начать.Как только вы освоитесь с этими функциями и с тем, что они представляют в SharePoint, вы быстро найдете другие (либо с помощью возвращаемых функций, либо с помощью MSDN).

1. SPList

Вероятно, с типом, с которым вам больше всего придется иметь дело.SPList представляет любой вид списка SharePoint.Это библиотека документов, опрос, библиотека изображений или любой другой пользовательский список.Почти все в SharePoint - это список, от Списка информации о пользователе (который используется для аутентификации) до блога (который представляет собой список записей в блоге).Элементы в списке: SPListItem

2. SPWeb и SPSite

Теперь это немного сбивает с толку, но SPSite представляет семейство сайтов, а SPWeb представляет отдельный сайт.Скажем, у вас есть сайт SharePoint на hXXp: //SharePointSite.com, а семейство сайтов (SPSite) будет hXXp: //SharePointSite.com, а SPWeb будет hXXp: //SharePointSite.com/blog или hXXp: // SharePointSite.com / about По сути, семейство сайтов - это коллекция SPWeb, представляющая собой коллекцию SPList (и других вещей, которые вас не интересуют).SPList всегда живет внутри сети.

3. SPQuery

Это SQL-код SharePoint.Хотя есть способ сделать LINQ 2 SharePoint в 2010 году ( и даже в 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.Вы можете обратиться за помощью в Google, когда вам это нужно, но для начала вы можете прочитать эту статью , которая многое объясняет.Это инструмент, который я использую для построения запросов: U2U CAML Builder

Кстати, хотя можно запрашивать списки через веб-сервисы, я рекомендую против этого.Если вы можете запустить свой код на машине, на которой установлен SharePoint, тогда объектная модель намного лучше / более интуитивно понятна, чем веб-сервисы, которые заменяют собой только когда SharePoint не установлен.Используйте их только в случае необходимости.Данные, которые они возвращают, находятся в XML, и форматирование является болью.Также не так много доступных функций.

1 голос
/ 30 ноября 2010

Вам определенно не следует обращаться к базам данных контента SharePoint напрямую.

Существует поисковая веб-служба, которую вы можете использовать для получения элементов, или веб-службы списка позволяют достаточно легко извлекать данные. Если вы размещаете свой код в SharePoint, используйте объектную модель SharePoint. Достаточно просто получить то, что вам нужно.

1 голос
/ 30 ноября 2010

Это зависит от контекста. Ответы на следующие вопросы помогут вам сделать лучший выбор для продвижения вперед.

Какой тип данных?

Список данных с одного сайта? Использовать веб-сервисы

Агрегирование контента по семействам сайтов? Использовать объектную модель сервера

Что я пытаюсь сделать с данными?

Показать сводку в простой веб-части? Рассмотреть возможность использования CQWP (веб-часть запроса контента) или DVWP (веб-часть просмотра данных)

В какие сроки я могу предоставить это решение?

Если вы ранее не выполняли развертывание пользовательского кода SharePoint и у вас слишком сжатые сроки, старайтесь придерживаться API веб-служб.

1 голос
/ 30 ноября 2010

Вы говорите о пользовательской базе данных или базе данных Sharepoint?

Вы никогда не должны напрямую касаться базы данных sharepoint, так как это переведет вашу ферму в неподдерживаемое состояние.

Если вы хотите получить доступ к пользовательской базе данных, рассмотрите возможность использования Entity Framework: http://msdn.microsoft.com/en-us/library/aa697427(VS.80).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...