Хранимая процедура транзакции C # - PullRequest
2 голосов
/ 01 декабря 2009

У меня небольшая проблема. Пожалуйста, ведите меня. Я кодирую в C # (Консольное приложение). Я вызвал 2 разные хранимые процедуры в моем коде. В основном обе эти хранимые процедуры обращаются к одной и той же таблице. Первый SP имеет запрос на выбор и запрос на обновление. Второй SP имеет один запрос на обновление.

Теперь я хочу вызвать эти SP в режиме транзакции (либо все успешно, либо второй SP не выполняет откат первого SP). Я использовал «TransactionScope» в моем коде C #, но, похоже, не работает нормально. то есть, когда я останавливаю консольное приложение, иногда я вижу, что первый SP выполняется, а второй выходит из строя.

Может кто-нибудь предложить мне это.

С уважением,
Джастин Самуэль.

1 Ответ

4 голосов
/ 01 декабря 2009

Если вы используете TransactionScope, он должен работать нормально, но область действия должна окружать соединение (я) :

using(TransactionScope tran = new TransactionScope()) {
    using(SqlConnection conn = new SqlConnection(cs)) {
      // either multiple commands on one connection
      using(SqlCommand cmd = conn.CreateCommand()) {
        // etc
      }
      using(SqlCommand cmd = conn.CreateCommand()) {
        // etc
      }
    }
    using(SqlConnection conn = new SqlConnection(cs)) {
      // or a separate connection
      using(SqlCommand cmd = conn.CreateCommand()) {
        // etc
      }
    }
    tran.Complete();
}

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

В качестве альтернативы для одиночного соединения используйте SqlTransaction, но не забудьте связать транзакцию (из соединения) с каждой командой.

...