powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Транзакция и DBConcurrencyException не могут подружиться
1 сообщений из 1, страница 1 из 1
Транзакция и DBConcurrencyException не могут подружиться
    #32972322
Доброго время суток!
Сохраняю БД с транзакцией (код ниже), и в тоже время мне надо обрабатывать ошибки параллельного обновления.
Хотел написать обработку событий RowUpdated, для каждого DataAdapter, но Expception все равно будет вылетать.
Посоветуйте, как мне сделать, чтобы при ошибке параллельного обновления, пользователю предлагалось или перезаписать строку несмотря ни на что, или считать обновленную строку другим пользователей.
А если какая то ошибка, кроме DBConcurrencyException, то откат транзакции.
Сохраняются у меня все изменения за раз, после нажатия кнопки "Сохранить", а не после каждого локального изменения строки в какой либо таблице

OleDbTransaction tran = oleDbConnection1.BeginTransaction(il);
//Мы не используем свою логику обновления, так что в транзакцию
//входят SelectCommand, а не Update, Delete, Insert
daGamePlayer.InsertCommand.Transaction = tran;
daGameArbiter.InsertCommand.Transaction = tran;
daArbiters.InsertCommand.Transaction = tran;
daPlayers.InsertCommand.Transaction = tran;
daGames.InsertCommand.Transaction = tran;
daPersonal.InsertCommand.Transaction = tran;
daTeams.InsertCommand.Transaction = tran;

daGamePlayer.UpdateCommand.Transaction = tran;
daGameArbiter.UpdateCommand.Transaction = tran;
daArbiters.UpdateCommand.Transaction = tran;
daPlayers.UpdateCommand.Transaction = tran;
daGames.UpdateCommand.Transaction = tran;
daPersonal.UpdateCommand.Transaction = tran;
daTeams.UpdateCommand.Transaction = tran;

daGamePlayer.DeleteCommand.Transaction = tran;
daGameArbiter.DeleteCommand.Transaction = tran;
daArbiters.DeleteCommand.Transaction = tran;
daPlayers.DeleteCommand.Transaction = tran;
daGames.DeleteCommand.Transaction = tran;
daPersonal.DeleteCommand.Transaction = tran;
daTeams.DeleteCommand.Transaction = tran;


try
{
//Чтобы избежать нарушения ссылочной целостности при обновлении
//источника данных, обновлять строки нужно в следующем порядке
daGamePlayer.Update(dsPHL1.Tables["GamePlayer"].Select(null,null, DataViewRowState.Deleted));
daGameArbiter.Update(dsPHL1.Tables["GameArbiter"].Select(null,null, DataViewRowState.Deleted));
daArbiters.Update(dsPHL1.Tables["Arbiters"].Select(null,null, DataViewRowState.Deleted));
daPlayers.Update(dsPHL1.Tables["Players"].Select(null,null, DataViewRowState.Deleted));
daGames.Update(dsPHL1.Tables["Games"].Select(null,null, DataViewRowState.Deleted));
daPersonal.Update(dsPHL1.Tables["Personal"].Select(null,null, DataViewRowState.Deleted));
daTeams.Update(dsPHL1.Tables["Teams"].Select(null,null, DataViewRowState.Deleted));


daTeams.Update(dsPHL1.Tables["Teams"].Select(null,null, DataViewRowState.ModifiedCurrent));
daTeams.Update(dsPHL1.Tables["Teams"].Select(null,null, DataViewRowState.Added));

daPersonal.Update(dsPHL1.Tables["Personal"].Select(null,null, DataViewRowState.ModifiedCurrent));
daPersonal.Update(dsPHL1.Tables["Personal"].Select(null,null, DataViewRowState.Added));

daGames.Update(dsPHL1.Tables["Games"].Select(null,null, DataViewRowState.ModifiedCurrent));
daGames.Update(dsPHL1.Tables["Games"].Select(null,null, DataViewRowState.Added));

daPlayers.Update(dsPHL1.Tables["Players"].Select(null,null, DataViewRowState.ModifiedCurrent));
daPlayers.Update(dsPHL1.Tables["Players"].Select(null,null, DataViewRowState.Added));

daArbiters.Update(dsPHL1.Tables["Arbiters"].Select(null,null, DataViewRowState.ModifiedCurrent));
daArbiters.Update(dsPHL1.Tables["Arbiters"].Select(null,null, DataViewRowState.Added));

daGameArbiter.Update(dsPHL1.Tables["GameArbiter"].Select(null,null, DataViewRowState.ModifiedCurrent));
daGameArbiter.Update(dsPHL1.Tables["GameArbiter"].Select(null,null, DataViewRowState.Added));

daGamePlayer.Update(dsPHL1.Tables["GamePlayer"].Select(null,null, DataViewRowState.ModifiedCurrent));
daGamePlayer.Update(dsPHL1.Tables["GamePlayer"].Select(null,null, DataViewRowState.Added));

tran.Commit();
}

catch (Exception ex)
{
tran.Rollback();
MessageBox.Show(ex.Message + Environment.NewLine + "Ошибка сохранения данных на сервере." + Environment.NewLine +
"Произведен откат транзакции.");
}
finally
{
oleDbConnection1.Close();
}
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Транзакция и DBConcurrencyException не могут подружиться
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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