C# 如何从Sharepoint列表中获取数据,然后使用C控制台应用程序将其插入SQL表

C# 如何从Sharepoint列表中获取数据,然后使用C控制台应用程序将其插入SQL表,c#,sharepoint,C#,Sharepoint,背景: 我用C控制台应用程序中的SSOM服务器端对象模型来完成这一切。 我有一个到空数据库的连接,它将被初始填充,然后根据需要更新 在SharePoint server上有两个列表,其中有一个包含所有其他列表名称的标题列表。其他列表是文章目录 标题列表包含大约40个字段,包括标题、目录类型、目录名称、目录ID等等,。。。诸如此类 其他目录列表包含大约300个字段CatalogId、ArticlePrice、ArticleName等,。。。等等 下面是我使用的类的代码: public class

背景:

我用C控制台应用程序中的SSOM服务器端对象模型来完成这一切。 我有一个到空数据库的连接,它将被初始填充,然后根据需要更新

在SharePoint server上有两个列表,其中有一个包含所有其他列表名称的标题列表。其他列表是文章目录

标题列表包含大约40个字段,包括标题、目录类型、目录名称、目录ID等等,。。。诸如此类

其他目录列表包含大约300个字段CatalogId、ArticlePrice、ArticleName等,。。。等等

下面是我使用的类的代码:

 public class SharePointProduction
 {
    private static XYZ_Entity _context = new XYZ_Entity();

    public static void Main()
    {           

        string siteURL = "http://somesite.local/sites/promo_tool";          

        try
        {
            using (SPSite site = new SPSite(siteURL))
            {
                using (SPWeb web = site.OpenWeb())
                {          

                    GetSharePointCatalogHeaders(web);

                    Console.WriteLine("Press any key to continue...");

                }
            }
        }
        catch (Exception)
        {
            PrintErrorSharepointConnection();
            PrintPressKeyToExit();
        }
        finally
        {
            Console.ReadKey();
        }
    }
GetSharePointCatalogHeaders方法---------

private static SPListItemCollection GetSharePointCatalogHeaders(SPWeb web)
    {

        var catalogHeaderList = web.Lists.TryGetList("Headers List");

        if (catalogHeaderList == null) throw new Exception("Unable to get catalog headers used for checking status of catalogs");

        var catalogHeaderItems = catalogHeaderList.GetItems("Id", "_x0160_ifra_x0020_artikla", "Naziv_x0020_artikla", "Katalog_x002f_ID", "Status_x0020_kataloga", "Datum_x0020_po_x010d_etka_x0020_");

        return catalogHeaderItems;
    }
到目前为止,这就是我得到的

我需要更新数据库中一个名为Headers的表中的Headers列表,并将其他列表文章目录更新为Catalogs表


更清楚地说,我很抱歉,英语是我的第二语言:

您的问题不清楚,但一个简单的解决方案是在excel中导出SharePoint列表,然后使用SQL management studio将该数据导入SQL表

但是,如果您想使用C,那么您可以使用下面的代码获取所有列表项,然后插入到SQL表中

using ( SPSite site = new SPSite ("http://moss/sites/yousitename"))
{

  SPWeb myWeb = site.OpenWeb();
  SPList target = myWeb.Lists["YourListName"];
  SPListItems items = list.Items;
  myWeb.Dispose();
 }

以下代码供您参考

class Program
{
    static void Main(string[] args)
    {
        try
        {
            using (SPSite site = new SPSite("http://somesite.local/sites/promo_tool"))
            {
                using (SPWeb myWeb = site.OpenWeb())
                {
                    SPList target = myWeb.Lists["Headers List"];
                    SPListItemCollection items = target.GetItems();
                    DataTable dt = items.GetDataTable();

                    if (dt.Rows.Count > 0)
                    {
                        string consString = "SQL Connection String";
                        using (SqlConnection con = new SqlConnection(consString))
                        {
                            using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
                            {
                                sqlBulkCopy.DestinationTableName = "Table1";
                                sqlBulkCopy.ColumnMappings.Add("ID", "ID");
                                sqlBulkCopy.ColumnMappings.Add("_x0160_ifra_x0020_artikla", "_x0160_ifra_x0020_artikla");
                                sqlBulkCopy.ColumnMappings.Add("Naziv_x0020_artikla", "Naziv_x0020_artikla");
                                sqlBulkCopy.ColumnMappings.Add("Katalog_x002f_ID", "Katalog_x002f_ID");
                                sqlBulkCopy.ColumnMappings.Add("Status_x0020_kataloga", "Status_x0020_kataloga");
                                sqlBulkCopy.ColumnMappings.Add("Datum_x0020_po_x010d_etka_x0020_", "Datum_x0020_po_x010d_etka_x0020_");
                                con.Open();
                                sqlBulkCopy.WriteToServer(dt);
                                con.Close();
                            }
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            Console.ReadKey();
        }
    }
}
我们也可以使用PowerShell来实现它,下面的文章与PowerShell一起供您参考

class Program
{
    static void Main(string[] args)
    {
        try
        {
            using (SPSite site = new SPSite("http://somesite.local/sites/promo_tool"))
            {
                using (SPWeb myWeb = site.OpenWeb())
                {
                    SPList target = myWeb.Lists["Headers List"];
                    SPListItemCollection items = target.GetItems();
                    DataTable dt = items.GetDataTable();

                    if (dt.Rows.Count > 0)
                    {
                        string consString = "SQL Connection String";
                        using (SqlConnection con = new SqlConnection(consString))
                        {
                            using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
                            {
                                sqlBulkCopy.DestinationTableName = "Table1";
                                sqlBulkCopy.ColumnMappings.Add("ID", "ID");
                                sqlBulkCopy.ColumnMappings.Add("_x0160_ifra_x0020_artikla", "_x0160_ifra_x0020_artikla");
                                sqlBulkCopy.ColumnMappings.Add("Naziv_x0020_artikla", "Naziv_x0020_artikla");
                                sqlBulkCopy.ColumnMappings.Add("Katalog_x002f_ID", "Katalog_x002f_ID");
                                sqlBulkCopy.ColumnMappings.Add("Status_x0020_kataloga", "Status_x0020_kataloga");
                                sqlBulkCopy.ColumnMappings.Add("Datum_x0020_po_x010d_etka_x0020_", "Datum_x0020_po_x010d_etka_x0020_");
                                con.Open();
                                sqlBulkCopy.WriteToServer(dt);
                                con.Close();
                            }
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            Console.ReadKey();
        }
    }
}
如果您使用SharePoint Online或在客户端访问SharePoint列表,我们也可以使用CSOM C来实现


因此,您需要编写代码来将值存储在数据库中。你有现有的数据库吗?您是否已经访问了它,如果是,如何访问?这是什么样的数据库?你想做什么?这些项目已经来自SQL Server数据库。但列表不是数据库表。您根本不需要那个列表名表。所有项目都已在web级别可用。如果您对CAML查询使用正确的方法,则可以将数据作为DataTable获取,但仍需要处理多个值等。您可以按内容类型进行筛选,并从整个网站获取所有相关项是的,我需要编写一个代码,从Sharepoint列表中读取数据并将其存储到数据库中。我有一个基于Microsoft SQL Server的数据库,它是用VS2019创建的。现在,我有一个Headers表,其中包含SharePoint列表Headers列表中存在的所有对应列。到数据库的连接是使用ADO.NET实体数据模型创建的。这两个选项都不简单。SharePoint不是一个数据库。导出到Excel仅导出特定视图,并且仅导出有限数量的记录。内容将是显示文本,而不是实际数据。至于通过项目访问列表项目,这是一个非常缓慢的过程,但这是可能的。我需要使用服务器端对象模型和C控制台应用程序。我需要使用console应用程序从SharePoint的列表中获取项目数据,然后将相同的数据插入其他服务器上的数据库。