Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > .AcceptChanges() не срабатывает


Автор: -ser- 8.2.2005, 08:04
Код
SqlDataAdapter myAdapter;
DataSet myDS;
DataTable myTable;
DataRow myRow;

SqlConnection conn = new SqlConnection();
...  //conn.ConnectionString = ...
conn.Open();

myAdapter = new SqlDataAdapter( "select * from tbl_customer", conn );
myDS = new DataSet();

myAdapter.Fill(myDS, "tbl_customer" );

myTable = myDS.Tables["tbl_customer"];
   
myRow   = myTable.NewRow();            
MessageBox.Show("New Row " + myRow.RowState); //показывает что New Row Detached

myRow["FirstName"] = "newFirstName";
myRow["LastName"]  = "newLastName ";
           
myTable.Rows.Add(myRow);
MessageBox.Show("AddRow " + myRow.RowState);//показывает что AddRow Added

   
myDS.AcceptChanges();
MessageBox.Show("AcceptChanges " + myRow.RowState);//показывает AcceptChanges Unchanged !!!


conn.Close();
з.ы.таблица создавалась SQL Server-ом, но установлены все возможные разрешения.

Автор: Domestic Cat 8.2.2005, 09:42
smile smile smile
Метод AcceptChanges() попросту говорит датасету что все изменения сделанные юзером можно считать переданными в ДБ. Потому твой код вообще изменений никуда не посылает.

Чтоб работало, нужно вызывать Update на адаптере.

Кстати коннекшн не обязательно явно открывать и закрывать, адаптер делает это сам.

Автор: -ser- 8.2.2005, 09:55
перед
Код
conn.Close()
для форума я опустил вызов метода UpdateDataSet(myDS); так как в нем все равно программа изменений не видела по той же самой причинеsmile
Код
private void UpdateDataSet(DataSet myDataSet1)
{
if (!myDataSet1.HasChanges(DataRowState.Added))
{
   MessageBox.Show("ret" + DataRowState.Added + "  " + DataRowState.Modified); //заходит сюда !!!
   return;
}
DataSet xDataSet;
xDataSet = myDataSet1.GetChanges(DataRowState.Added);
if (xDataSet.HasErrors)
{
   MessageBox.Show("errrrr");
   // to resolve errors.
}
myAdapter.Update(xDataSet);
}

Автор: Domestic Cat 8.2.2005, 10:14
То есть твой метод стоит между myDS.AcceptChanges() и conn.Close()?

Автор: -ser- 8.2.2005, 10:24
точно так.

Автор: Domestic Cat 8.2.2005, 11:19
Ну так он должен стоять перед AcceptChanges.

Автор: -ser- 8.2.2005, 12:58
согласен, но и здесь ничего не работало пока не указал
Код
SqlCommandBuilder cb;
cb= new SqlCommandBuilder(myAdapter);
сейчас все сохраняет на сервере. кстати вопреки документации AcceptChanges вообще убрал, т.к. в конечном итоге они так и не фиксировали изменений.

Автор: Domestic Cat 8.2.2005, 19:29
Само сoboj, по умолчанию у адаптера логики обновлений нет. Либо вручную пишешь комманд билдер, либо добавляешь ее в конфигурейшн визард адаптера.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)