Реализация транзакций через несколько баз данных
Я выполняю изменения данных в нескольких базах данных и хочу реализовать транзакцию, которая будет охватывать все изменения.
Вот что у меня сейчас есть:
try
{
db[1].begintransaction();
db[1].ExecuteNonQuery();
db[2].begintransaction();
db[2].ExecuteNonQuery();
...
db[N].begintransaction();
db[N].ExecuteNonQuery();
// will execute only if no exception raised during the process
for (int a = 0; a < N; a++)
{
db[a].Commit();// what if there is an error/exception here
}
}
catch
{
for (int a = 0; a < N; a++)
{
db[a].RollBack();
}
}
Проблема в том, что вышеперечисленное ужасно потерпит неудачу, если исключение произойдет во времяCommit()
(см. комментарий). Есть ли лучший способ сделать это?