3

我希望从 sharepoint 2007 中的一些不同客户列表中编译数据

它是一个托管的共享点站点,因此我无权访问机器后端。

是否有任何示例代码可以使用 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();
4

2 回答 2

7

如果您无法在 SharePoint 机器上部署代码,那么您几乎必须使用 Web 服务。

列表 Web 服务就是您所追求的。

它将位于http://yousharepointsite.com/_vti_bin/Lists.asmx并且默认情况下应该打开。请注意,如果您的站点配置了 FBA,则必须在查询 lists.asmx 之前使用 _vti_bin/Authentication.asmx 登录。

这是一篇提供您需要的所有信息的文章:

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

由于上述原因,请跳过有关使用对象模型查询 SharePoint 列表的部分,并直接转到使用 SharePoint Web 服务使用 CAML 检索列表项。

这篇文章很完整,所以我认为你应该可以接受。

根据您的编辑,我认为您不能像那样创建与远程站点的连接。你不能像这样用 SQL 查询 SharePoint,你真的需要使用 CAML ......

添加对 Web 服务的引用后:

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

在此处阅读有关 GetListItems 的更多信息

就像我说的,你需要使用网络服务。如果您尝试创建这样的连接以直接查询数据库,那么您将走向死胡同。不推荐。

于 2011-04-07T15:27:33.023 回答
5

除非您使用适用于 SharePoint 的 ado.net 连接器,否则不确定您尝试执行的操作是否可行,请查看http://www.bendsoft.com/net-sharepoint-connector/

它使您能够像与普通 sql 表一样与 SharePoint 列表交谈

例如插入一些数据

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);
于 2011-04-07T17:49:08.227 回答