Список доступа в sharepoint 2007 с помощью C#
Я с нетерпением собираю данные из нескольких различных списков обычая в 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 ответа
Не уверен, что то, что вы пытаетесь сделать, возможно, если вы не используете соединитель 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);
Если вы не можете развернуть код на компьютере с SharePoint, то вам, скорее всего, придется использовать веб-сервисы.
Веб-сервис списков - это то, что вам нужно.
Он будет расположен на http://yousharepointsite.com/_vti_bin/Lists.asmx и должен быть открыт по умолчанию. Обратите внимание, что если ваш сайт настроен с использованием FBA, вам придется использовать _vti_bin/Authentication.asmx, чтобы войти в систему, прежде чем запрашивать lists.asmx.
Вот статья, которая дает всю необходимую информацию:
По причинам, указанным выше, пропустите часть, посвященную использованию объектной модели для запроса списков 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 здесь
Как я уже сказал, вам нужно использовать веб-сервисы. Вы идете в тупик, если пытаетесь создать подобное соединение для непосредственного запроса к базе данных. Не рекомендуется