SqlConnection.BeginTransaction(IsolationLevel.ReadUncommitted).Commit();

Люди, я столкнулся с небольшим количеством кода, и я немного запутался в том, что происходит.

Я работаю над рефакторингом кода, чтобы вместо этого обрабатывать несколько SqlCommands, а не одну SqlCommand, с которой он в настоящее время работает. Я надеюсь, что все SqlCommands могут быть обработаны в рамках одной транзакции.

Каждая SqlCommand является хранимой процедурой, поэтому фактически моя транзакция будет вызывать одну (или несколько) хранимых процедур - во-первых, возможно ли это?

В любом случае, вот блок кода:

public virtual void Execute()
{
  using (SqlConnection conn = new SqlConnection(ConnectionString))
  {
    SqlCommand storedProcedure = new SqlCommand(BlahBah, conn);
    storedProcedure.CommandType = CommandType.StoredProcedure;

    conn.Open();
    **conn.BeginTransaction(IsolationLevel.ReadUncommitted).Commit();**

    storedProcedure.ExecuteNonQuery();
    conn.Close();

  }
}

В частности, выделенный оператор, который устанавливает Transaction для объекта Connection, добавляется с помощью ".Commit ()".

Фактический исходный код не имеет ROLLBACK, и нигде нет коммитов. По сути, я вижу что-то вроде AutoCommit? Имеет ли смысл иметь здесь транзакцию TRANSACTION, если, например, БД не требует обработки транзакции?

Возможно, более важно для моих усилий по рефакторингу, будет ли что-то подобное иметь смысл? То есть, если я обработал 10 хранимых процедур, а последняя выдала ошибку, будет ли автоматический откат на все 10?

Вот где я хочу приземлиться:

public virtual void ExecuteTest()
{
  using (SqlConnection conn = new SqlConnection(ApplicationConfig.DbConnectInfo.ConnectionString))
  {
    var errorText = string.Empty;
      conn.Open();
      conn.BeginTransaction(IsolationLevel.ReadUncommitted).Commit();

      foreach (var storedProcedure in StoredProcedures)
      {
        storedProcedure.Connection = conn;
        storedProcedure.ExecuteNonQuery();
      }
      conn.Close();
  }
}

РЕДАКТИРОВАТЬ: эта ссылка MS предлагает подход будет работать:

SqlConnection.BeginTransaction Method (IsolationLevel)

Спасибо за Ваш интерес.

0 ответов

Другие вопросы по тегам