事务的类型
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 中,可对 SqlCeConnection 对象使用 BeginTransaction 方法来启动一个显式事务。若要结束该事务,请调用 SqlCeTransaction 对象的 Commit 或 Rollback 方法。
在 OLE DB 中,调用 ITransactionLocal::StartTransaction 方法来启动一个事务。通过调用 ITransaction::Commit 或 ITransaction::Abort 方法并将 fRetaining 设置为 FALSE,可结束该事务,而不自动启动另一个事务。请注意,可以在单个 ADO.NET 连接上创建多个事务,并将其分配给各个命令。
重要
当您使用 ADO.NET API 提交事务时,应关闭该事务中的所有已打开的数据读取器和结果集。
自动提交事务
自动提交模式是 SQL Server Compact 的默认事务管理模式。每个 SQL 语句完成后都会被提交或回滚。当这一默认模式未被显式事务所覆盖时,SQL Server Compact 连接以自动提交模式运行。自动提交模式也是 ADO.NET 和 OLE DB 的默认模式。
除非 BEGIN TRANSACTION 语句启动一个显式事务,否则 SQL Server Compact 连接以自动提交模式运行。提交或回滚显式事务后,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 为该批查询构建执行计划。
发生某个操作的更高级的事务既不会回滚该事务,也不会提交该事务。