Типы транзакций
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)