список доступа в sharepoint 2007 с помощью c # - PullRequest
3 голосов
/ 07 апреля 2011

Я собираюсь собрать данные из нескольких списков различных пользователей в sharepoint 2007

Это хост-сайт sharepoint, поэтому у меня нет доступа к бэкэнду компьютера.

Есть ли какой-нибудь пример кода для доступа к сайту sharepoint с помощью c #?

Здесь мой код до сих пор (я получаю ошибку Невозможно подключиться к сайту Sharepoint ''. Попробуйте еще разпозже. )

    DataSet dt = new DataSet();
    string query = "SELECT * FROM list";
    string site = "http://sp.markonsolutions.com/Lists/Security/";
    string list = "35E70EO4-6072-4T55-B741-4B75D5F3E397"; //security db
    string myConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=2;RetrieveIds=Yes; DATABASE="+site+";LIST={"+list+"};";
    OleDbConnection myConnection = new OleDbConnection();
    myConnection.ConnectionString = myConnectionString;
    OleDbCommand myAccessCommand = new OleDbCommand(query,myConnection);
    OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(myAccessCommand);
    myConnection.Open();



          myDataAdapter.Fill(dt);

    //execute queries, etc
    myConnection.Close();

Ответы [ 2 ]

7 голосов
/ 07 апреля 2011

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

Веб-служба списков - это то, что вам нужно.

Этобудет расположен на http://yousharepointsite.com/_vti_bin/Lists.asmx и должен быть открыт по умолчанию.Обратите внимание, что если ваш сайт настроен с использованием FBA, вам нужно будет использовать _vti_bin / Authentication.asmx для входа в систему, прежде чем выполнять запросы к lists.asmx.

Вот статья, в которой содержится вся необходимая информация:

http://sharepointmagazine.net/articles/writing-caml-queries-for-retrieving-list-items-from-a-sharepoint-list

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

Статья довольно полная, поэтому я думаю, что с этим у вас все в порядке.

Что касается ваших правок, я не думаю, что вы можете создать соединение с удаленным сайтом таким образом.Вы не можете запрашивать SharePoint с помощью SQL таким образом, вам действительно нужно использовать CAML ...

После добавления ссылки на веб-службу:

ListService listsClient = new ListService.Lists();
listsClient.Url = @"http://sp.markonsolutions.com/" + @"/_vti_bin/lists.asmx";
listsClient.Credentials = System.Net.CredentialCache.DefaultCredentials;
listsClient.GetListItems(...);

Подробнее оGetListItems здесь

Как я уже сказал, вам нужно использовать веб-сервисы.Вы идете в тупик, если пытаетесь создать подобное соединение для непосредственного запроса к базе данных.Не рекомендуется.

5 голосов
/ 07 апреля 2011

Не уверен, что то, что вы пытаетесь сделать, возможно, если вы не используете соединитель ado.net для SharePoint, взгляните на http://www.bendsoft.com/net-sharepoint-connector/

Это позволяет вам общаться со списками SharePoint, как если бы они были обычными sql-таблицами

Например, для вставки некоторых данных

public void SharePointConnectionExample1()
{
    using (SharePointConnection connection = new SharePointConnection(@"
                Server=mysharepointserver.com;
                Database=mysite/subsite
                User=spuser;
                Password=******;
                Authentication=Ntlm;
                TimeOut=10;
                StrictMode=True;
                RecursiveMode=RecursiveAll;
                DefaultLimit=1000;
                CacheTimeout=5"))
    {
        connection.Open();
        using (SharePointCommand command = new SharePointCommand("UPDATE `mytable` SET `mycolumn` = 'hello world'", connection))
        {
            command.ExecuteNonQuery();
        }
    }
}

Или для выбора данных списка в DataTable

string query = "SELECT * FROM list";
conn = new SharePointConnection(connectionString);
SharePointDataAdapter adapter = new SharePointDataAdapter(query, conn);

DataTable dt = new DataTable();
adapter.Fill(dt);

Или с помощью вспомогательного метода для заполнения DataGrid

string query = "Select * from mylist.viewname";
DataGrid dataGrid = new DataGrid();
dataGrid.DataSource = Camelot.SharePointConnector.Data.Helper.ExecuteDataTable(query, connectionString);
dataGrid.DataBind();
Controls.Add(dataGrid);
...