Типы транзакций

Microsoft SQL Server Compact поддерживает два режима транзакций: явный режим и режим автоматической фиксации.

Явные транзакции

В явной транзакции явно указываются ее начало и конец. Их можно указать либо с помощью инструкций SQL, либо с помощью функций интерфейсов API базы данных.

Инструкции SQL

Для определения явных транзакций с помощью среды Visual Studio можно использовать следующие инструкции SQL.

  • BEGIN TRANSACTION

    Отметка точки запуска явной транзакции для подключения.

  • COMMIT TRANSACTION

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

  • ROLLBACK TRANSACTION

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

ADO.NET и OLE DB

Явные транзакции также можно использовать в среде ADO.NET и OLE DB.

В ADO.NET для запуска явной транзакции следует использовать метод BeginTransaction на объекте SqlCeConnection. Чтобы завершить транзакцию, вызовите методы Commit или Rollback объекта SqlCeTransaction.

Для запуска транзакции в OLE DB вызовите метод ITransactionLocal::StartTransaction. Для завершения транзакции без автоматического начала новой транзакции следует пользоваться либо методом ITransaction::Commit, либо методом ITransaction::Abort, со значением параметра fRetaining, равным FALSE. Следует заметить, что на одном соединении в среде ADO.NET можно создавать несколько транзакций и назначать их разным командам.

Важно!

Когда транзакция фиксируется с помощью API-интерфейса среды ADO.NET, все открытые модули чтения и результирующие наборы этой транзакции должны быть закрыты.

Автоматические транзакции

Автоматический режим является стандартным режимом SQL Server Compact управления транзакциями. По завершении исполнения каждая инструкция SQL фиксируется либо откатывается. Подключение к SQL Server Compact выполняется в автоматическом режиме каждый раз, когда этот стандартный режим не переписывается явными транзакциями. Режим автоматической фиксации транзакций используется по умолчанию в ADO.NET и OLE DB.

Подключение к SQL Server Compact выполняется в автоматическом режиме, пока инструкция BEGIN TRANSACTION не запустит явную транзакцию. При фиксации либо откате явной транзакции SQL Server Compact возвращается в автоматический режим.

Компиляция и ошибки времени выполнения

В отличие от SQL Server, SQL Server Compact не обрабатывает инструкции целыми пакетами. SQL Server Compact обрабатывает инструкции по одной и исполняет каждую отдельно. Если одна инструкция возвращает ошибку, это не влияет на прочие инструкции в том же пакете. Например, если среда Visual Studio используется для выполнения следующего набора запросов в SQL Server Compact, первые два запроса окажутся правильными, а третий выполнить не удастся из-за ошибки синтаксиса.

CREATE TABLE TestData (col int);

INSERT INTO TestData VALUES (1);

INSERTT INTO TestData VALUES (1);

Примечание

Если запросы были отправлены в SQL Server в виде пакета, они все завершатся неуспешно, поскольку анализируются все вместе. Синтаксическая ошибка не даст SQL Server создать план выполнения для пакета.

Транзакции более высокого уровня, в которых происходит операция, не откатывают и не фиксируют транзакцию.

См. также

Основные понятия

Транзакции (SQL Server Compact)

Управление транзакциями

Другие ресурсы

Транзакции и подключения