На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Работа с DataTable в С# , Не добавляются записи
    Здравствуйте.
    Не могу понять, почему не добавляются записи в таблицу. Делаю по примеру в MSDN, на ни ошибок не выскакивает, ни записи не добавляются в базу.
    Что я делаю не так?

    ExpandedWrap disabled
                  da = new OleDbDataAdapter("SELECT * FROM Users", Conn);
                  ds = new DataSet();                
                  da.Fill(ds, "Users");
       
                  DataTable workTable = ds.Tables[0];
                  DataRow newRow = workTable.NewRow();
                  newRow["uid"] = 1;
                  newRow["Login"] = "111";
                  workTable.Rows.Add(newRow);
                  newRow.AcceptChanges();
                  Conn.Close();
      Попробуй сделать da.Update(ds);
      Но я не уверен, поскольку сам не пробовал
        2005fs дело говорит. Именно da.Update(ds) выдаст запросы на Update/Insert/Delete в базу. А вот строчку туцКщц.AcceptChanges убери, иначе адаптер посчитает строку не требующейй обновления
          Цитата andrey @
          da.Update(ds)


          Сделал da.Update(ds, "Users")
          Получил "Update requires a valid InsertCommand when passed DataRow collection with new rows." Без INSERT-а никак нельзя обойтись, что-ли?
          Мне его несложно написать, просто не могу врубиться в логику работы с БД в шарпе. После Дельфи многое кажется неудобным, пробую себя переубеждать :)
            Адаптер состоит из InsertCommand, DeleteCommand, UpdateCommand, SelectCommand. Когда ты вызвал -
            Цитата Shaden @
            da = new OleDbDataAdapter("SELECT * FROM Users", Conn);

            ты проинициализировал только select. Остальные нужно инициализировать тоже.
            когда ты вызываешь
            Цитата Shaden @
            da.Update(ds, "Users")

            адаптер анализирует DataRowState в строках и решает какую команду применять. Почитай что-то о ADO.NET
              Цитата PIL @
              ты проинициализировал только select. Остальные нужно инициализировать тоже.
              когда ты вызываешь

              А это для чего? Суть вся в том, чтобы сделать изменения в базу только с помощю изменений в датасете, не делая sql-запросы на это.

              Нужно прсото задействовать SqlCommandBuilder:
              ExpandedWrap disabled
                SqlCommandBuilder myBuilder = new SqlCommandBuilder(myDataAdapter);
                myDataAdapter.Update(dsAutosList, "autos_list");


              И еще: в таблице базы данных для которой вносиш изменения обязательно должен быть первынный ключ, иначе будет ексцепшн
              Сообщение отредактировано: 2005fs -
                Цитата 2005fs @
                Нужно прсото задействовать SqlCommandBuilder:
                -

                2005fs, это самый простой вариант, который появился в 2.0. Кроме того, если использовать для вышеуказанных операций хранимые процедуры - прийдется писать ручками
                Цитата 2005fs @
                изменения в базу только с помощю изменений в датасете, не делая sql-запросы на это.
                - а ты думаешь адаптер не юзает запросы? Или ты думаешь что SqlCommandBuilder тебе их не генерит? ;)
                  2 2005fs. Да-да-да! Я как раз задействовал именно его, SqlCommandBuilder и все заработало, спасибо :)

                  Добавлено
                  Вопрос решен, спасибо всем.
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0271 ]   [ 16 queries used ]   [ Generated: 27.04.24, 01:58 GMT ]