SharePoint - 如果ID存在则更新列表项,否则为AddItem

时间:2016-01-18 16:21:06

标签: c# asp.net web-services sharepoint sharepoint-2013

我有一个SharePoint列表,其中包含我最初从SQL中的表中填充的100个项目。现在,我想更新那些已更改的项目并添加新项目。如何根据该列表中的列更新项目?非常感谢任何帮助。

这是我最初添加项目的方式:

            Microsoft.SharePoint.Client.List oList_Donors = context.Web.Lists.GetByTitle("XYZ");

            ListItemCreationInformation itemCreateInfo = new ListItemCreationInformation();

            using (OdbcConnection connection = new OdbcConnection())
            {
                connection.ConnectionString = "dsn=abc;uid=efg;pwd=hij;DataSource=klm";
                connection.ConnectionTimeout = 100;
                connection.Open();

                OdbcCommand command_abc = new OdbcCommand("Select * From vw_SP_abc_efg", connection);

                try
                {
                    using (OdbcDataReader reader = command_abc.ExecuteReader())
                    {
                        while (reader.Read())
                        {

                            var obj0 = reader.GetValue(48);
                            var obj1 = reader.GetValue(0);
                            var obj2 = reader.GetValue(33);
                            var obj3 = reader.GetValue(47);
                            var obj4 = reader.GetValue(42);
                            var obj5 = reader.GetValue(42);


                            ListItem oListItem_abc = oList_abc.AddItem(itemCreateInfo);


                            oListItem_abc["Title"] = (obj0 == null || obj0.Equals(DBNull.Value)) ? "" : reader.GetString(48).ToString();
                            oListItem_abc["abc_x0020_ID"] = (obj1 == null || obj1.Equals(DBNull.Value)) ? "" : reader.GetString(0).ToString();
                            oListItem_abc["Excluded_x0020_By"] = (obj2 == null || obj2.Equals(DBNull.Value)) ? "" : reader.GetString(33).ToString();
                            oListItem_abc["Excluded_x0020_On"] = (obj3 == null || obj3.Equals(DBNull.Value)) ? "" : reader.GetDateTime(47).ToString("MM/dd/yyyy");
                            oListItem_abc["Reason"] = (obj4 == null || obj4.Equals(DBNull.Value)) ? "" : reader.GetString(42).Substring(50, reader.GetString(42).ToString().Length - 50);
                            oListItem_abc["Publish"] = (obj5 == null || obj5.Equals(DBNull.Value)) ? "" : reader.GetString(42).Substring(50, reader.GetString(42).ToString().Length - 50);


                            oListItem_abc.Update();

                            context.ExecuteQuery();

                        }

                    }

                }

                catch (Exception exception)
                {
                    Console.WriteLine("The Error is:" + exception);
                    Console.ReadLine();
                }

            }

1 个答案:

答案 0 :(得分:0)

首先,我会像你已经做的那样进行数据库查询。之后,您将获得数据库项目的ID和所有其他信息(例如时间戳,其他字段,......)。在阅读器/循环中使用此项目,我将为每个数据库项目创建一个caml查询,您可以根据数据库ID为您的共享点列出过滤器。然后你会得到一个Listitem。我没有,然后从db项目列表中创建新项目。

如果您获得了Listitem,则可以将sharepoint项的字段与reader对象的db字段进行比较。

如果有任何差异,您可以更新listitem。

但要小心,在包含许多项目的sharepoint列表上进行此类操作非常昂贵(时间)并且运行时间很长。