Как зафиксировать эти изменения строки данных обратно в БД - PullRequest
4 голосов
/ 16 мая 2011

Я раньше не работал с наборами данных.Я использую много LINQ / Entity Framework.

Вот код, который я написал (это одна часть переключателя):

  if (!DataHelper.DataSourceIsEmpty(dsUp))
                {
                    //get datarow collection from dataset
                    DataRowCollection drc = dsUp.Tables[0].Rows;
                    //Loop through dataset
                    foreach (DataRow dr in drc)
                    {
                        //get current dataset row sortid
                        int sortID = Convert.ToInt32(dr["SortID"]);
                        { 
                        //if its the row above then minus one
                        if (sortID == nodeAbove)
                        {
                            int newID = Convert.ToInt32(dr["SortID"].ToString());
                            newID--;
                            dr["SortID"] = newID;

                            //TODO: save changes back to original ds


                        }
                        }

                    }
                }

                break;

Я пробовал такие вещи, как:

  • dr.AcceptChanges
  • dsUp.AcceptChanges (dr)
  • drc.copyto (dsUP)
  • dsUp.Merge (drc)

и многие другие подобные попытки, которые не сработали.При поиске по этой теме все результаты, которые я обнаружил, используют адаптер таблицы ... так как я работаю в cms, я получаю свои данные примерно так:

DataSet dsUp = tree.SelectNodes(CurrentSite, path, cultureCode, true, classnames, where, orderby);

Любая помощь в получении изменений, сохраненных обратно вДБ будет очень признателен Cheers.

С момента публикации я также попробовал этот метод, который, к сожалению, не работал:

        //dataset to hold results before merge 
        DataSet DSResults = tree.SelectNodes(CMSContext.CurrentSite.SiteName, path, cultureCode, true, classnames);
        DSResults.Clear();


        if (!DataHelper.DataSourceIsEmpty(dsUp))
        {
            //get datarow collection from dataset
            DataRowCollection drc = dsUp.Tables[0].Rows;
            //Loop through dataset
            foreach (DataRow dr in drc)
            {
                //get current dataset row sortid
                int sortID = Convert.ToInt32(dr["SortID"]);
                { 
                //if its the row above then minus one
                if (sortID == nodeAbove)
                {
                    int newID = Convert.ToInt32(dr["SortID"].ToString());
                    newID--;
                    dr["SortID"] = newID;
                    dr.AcceptChanges();
                    DSResults.Tables[0].Rows.Add(dr);



                }
                }

            }
        }
        //save changes back to original ds
        dsUp.Merge(DSResults);
        dsUp.AcceptChanges();
        break;

1 Ответ

2 голосов
/ 16 мая 2011

Набор данных за сценой реализует шаблон UnitOfWork, отслеживающий все изменения, которые вы внесли с тех пор, как вы извлекли данные из базы данных.

, что вы пропустили, вызывает обновление набора данных, чтобы сохранить всеизменения обратно в БД

Я добавил обновление в ваш код:

if (!DataHelper.DataSourceIsEmpty(dsUp))
                {
                    //get datarow collection from dataset
                    DataRowCollection drc = dsUp.Tables[0].Rows;
                    //Loop through dataset
                    foreach (DataRow dr in drc)
                    {
                        //get current dataset row sortid
                        int sortID = Convert.ToInt32(dr["SortID"]);
                        { 
                        //if its the row above then minus one
                        if (sortID == nodeAbove)
                        {
                            int newID = Convert.ToInt32(dr["SortID"].ToString());
                            newID--;
                            dr["SortID"] = newID;
                            //TODO: save changes back to original ds

                        }
                        }

                    }
                  //you can save here as the dataset will keep track of all the changes
                  YourDataAdapter.Update("tableName",dsUp)
                }
...