Когда фактически начинается транзакция БД, написанная в ADO.NET?

2

Одним из ключевых моментов в приложениях с интенсивной базой данных является сокращение транзакций как можно короче.

Сегодня мне было интересно, когда эта транзакция начнется:

using (SqlConnection sqlConnection = new SqlConnection(connectionString))
    {
        sqlConnection.Open();
/*(1)*/ SqlTransaction sqlTransaction = sqlConnection.BeginTransaction(IsolationLevel.ReadUncommitted); 

        //Perform some stuff
        //...

/*(2)*/ using (SqlCommand command = new SqlCommand(sqlQuery, sqlConnection, sqlTransaction))  
        {
             //Some other stuff
             //...
             try
             {
                 /*(3)*/sqlCommand.ExecuteNonQuery();
                 //More irrelevant code
                 //...
                 sqlCommand.CommandText = otherQuery;
                 sqlCommand.ExecuteNonQuery();
                 sqlTransaction.Commit();
             }
             catch(Exception)
             {
                 sqlTransaction.Rollback();
                 throw;
             }
        }
  }

На этапе (1), (2) или (3)? В идеале это должно быть на шаге 3.

  • 0
    Хороший вопрос, не забывайте, что sqlTransaction.Rollback (); также может потерпеть неудачу ...
Теги:
sql-server
ado.net
transactions

1 ответ

6
Лучший ответ

Сделка начинается в точке 3, при первом вызове команды на соединение.

Это можно проверить с помощью SQL Server Profiler.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню