Могу ли я смешать SqlConnection.BeginTransaction и TransactionScope? - PullRequest
7 голосов
/ 22 апреля 2009

Это связано с транзакциями вложенных баз данных в C # .

Объекты в коллекции, которые я хочу взять в транзакции, реализуют свои собственные транзакции, используя метод SqlConnection.BeginTransaction.

После прочтения этого поста Я не уверен, смогу ли я их тоже смешать или нет. Я использую SQL Server 2005, и каждый объект использует сведения о соединении из класса статической конфигурации.

Кто-нибудь имеет опыт с этим?

Вот пример кода:

using(TransactionScope scope = new TransactionScope())
{
  for (int i=0; i<=1000....) 
  {
    SqlConnection con = new SqlConnection()
    SqlCommand cmd = new SqlCommand("delete from ...", con); 

    try {
       con.Open(); 
       DbTransaction t = con.BeginTransaction();
       cmd.ExecuteNonQuery(); 
       ...
       cmd.CommandText = .... ;
       cmd.ExecuteNonQuery(); 
       t.Commit  ...
    } 
    catch {
       t.Rollback ...
    }
    con.Close()
  }
}

Thx

1 Ответ

5 голосов
/ 23 апреля 2009

Потратив часы на настройку MSDTC для работы на обеих машинах, я, наконец, дошел до того, что смог протестировать код.

Кажется, работает (с 1 базой данных)

Вышеуказанная проблема может быть полезна людям, которые не имеют доступа к исходному коду, поэтому не могут избавиться от «устаревшей» транзакционной системы или если транзакционные части кода не локализованы или, как в моем случае, Вы не хотите слишком много возиться со сложным кодом, который доказал свою стабильность в производственной среде, но вам нужно вводить вложенные транзакции ...

Дайте мне знать, если у вас другой опыт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...