Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Transaction для нескольких SqlDataAdapter / 6 сообщений из 6, страница 1 из 1
13.04.2009, 12:26
    #35928000
Suzeren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Transaction для нескольких SqlDataAdapter
Проблема в следующем:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
GS.SQL.Open();
using (SqlTransaction txn = GS.SQL.BeginTransaction())
{
  GS.DAProject.DeleteCommand.Transaction = txn;
  GS.DAProject.InsertCommand.Transaction = txn;
  GS.DAProject.UpdateCommand.Transaction = txn;

  GS.DAExpert.DeleteCommand.Transaction = txn;
  GS.DAExpert.InsertCommand.Transaction = txn;
  GS.DAExpert.UpdateCommand.Transaction = txn;

  GS.DAWorks.DeleteCommand.Transaction = txn;
  GS.DAWorks.InsertCommand.Transaction = txn;
  GS.DAWorks.UpdateCommand.Transaction = txn;

  try
  { 
     GS.DAProject.Update(GS.DTProject);
     GS.DAExpert.Update(GS.DTExpert);
     GS.DAworks.Update(GS.DTWorks);
     txn.Commit();
  } 
  catch(Exception ex) 
  {
     txn.Rollback();
     GS.DTProject.RejectChanges();
     GS.DTExpert.RejectChanges();
     GS.DTWorks.RejectChanges();
  }
  finally
  {
    GS.SQL.Close();
  }
}


Ситуация такая... допустим ошибка произошла при обновлении второй таблицы по счету GS.DAExpert. В этом случае txn.Rollback() удачно отработает, и обновления откатятся на сервере. НО (!!!) в GS.DTProject добавленные строки останутся, потому что когда отправляли изменения на сервер внутри транзакции они отправились без ошибки и строки пометились как RowState.Original и GS.DTProject.RejectChanges() не работает... :( Как быть в этой ситуации?? Как откатить изменения еще и в тэйбле, при таком вот обновлении??
...
Рейтинг: 0 / 0
14.04.2009, 00:49
    #35929363
Джибс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Transaction для нескольких SqlDataAdapter
Завернуть в одну хранимку, и там же в одну транцакцию, чем не выход ?
...
Рейтинг: 0 / 0
14.04.2009, 07:22
    #35929463
Ermak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Transaction для нескольких SqlDataAdapter
Делай так.
Код: plaintext
1.
2.
         OleDbDataAdapter da = new OleDbDataAdapter(); //Создать dataAdapter
         da.AcceptChangesDuringUpdate = false; // не выполнять операцию AcceptChanges
...
Рейтинг: 0 / 0
14.04.2009, 14:02
    #35930671
Suzeren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Transaction для нескольких SqlDataAdapter
Спасибо :) Все замечательно работает.
...
Рейтинг: 0 / 0
14.04.2009, 14:21
    #35930752
OldWoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Transaction для нескольких SqlDataAdapter
SuzerenСпасибо :) Все замечательно работает.
Это работать не может так как при откате Add записи записи станут Modified! В MSDN это все описано читай про AcceptChangesDuringUpdate
Примечание.
Задание для свойства AcceptChangesDuringUpdate значения false применяется ко всем изменениям данных, а не только к их вставкам. Если требуется изменить или удалить строки в одном и том же обновлении, предотвратив при этом вызов AcceptChanges только для вставок, то вместо задания для AccceptChangesDuringUpdate значения false, следует использовать обработчик событий для события RowUpdated объекта DataAdapter. В обработчике событий можно проверить свойство StatementType, чтобы определить, является ли изменение данных вставкой, и если это верно (true), установить для свойства Status объекта RowUpdatedEventArgs значение SkipCurrentRow. Дополнительные сведения и примеры см. в разделе Извлечение значений идентификаторов или автонумерации (ADO.NET).
...
Рейтинг: 0 / 0
18.04.2009, 07:28
    #35940097
Suzeren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Transaction для нескольких SqlDataAdapter
OldWoker
Это работать не может так как при откате Add записи записи станут Modified! В MSDN это все описано читай про AcceptChangesDuringUpdate


Спасибо за замечание. Но мне принципиально именно откатить данные. То, какой вид они имеют потом - мне не важно. Т.е modified они или нет - меня совершенно не тревожит. Таков алгоритм. Но все равно, спасибо, ценное замечание. :)
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Transaction для нескольких SqlDataAdapter / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]