提交和回滚事务

若要在手动提交模式下提交或回滚事务,应用程序会调用 SQLEndTran。 支持事务的 DBMS 驱动程序通常通过执行 COMMITROLLBACK 语句来实现此函数。 驱动程序管理器在连接处于自动提交模式时不会调用 SQLEndTran;即使应用程序尝试回滚事务,它也会返回 SQL_SUCCESS。 由于不支持事务的 DBMS 的驱动程序始终处于自动提交模式,因此它们可以实现 SQLEndTran 以返回 SQL_SUCCESS,而无需执行任何操作或根本不实现它。

注意

应用程序不应使用 SQLExecuteSQLExecDirect 执行 COMMITROLLBACK 语句来提交或回滚事务。 这样做的效果是不明确的。 可能的问题包括驱动程序不再知道事务何时处于活动状态,以及这些语句因数据源不支持事务而失败。 这些应用程序应改为调用 SQLEndTran

如果应用程序将环境句柄传递给 SQLEndTran 但不传递连接句柄,对于在环境中具有一个或多个活动连接的每个驱动程序,驱动程序管理器会在概念上使用环境句柄来调用 SQLEndTran。 然后,驱动程序在环境中的每个连接上提交事务。 但是,必须意识到驱动程序和驱动程序管理器都不会对环境中的连接执行两阶段提交;这只是一种编程便利,可以为环境中的所有连接同时调用 SQLEndTran

两阶段提交通常用于提交分布在多个数据源的事务。在其第一阶段,将轮询数据源以确定它们是否可以提交其部分事务。在第二个阶段中,实际上是在所有数据源上提交事务。如果任何数据源在第一阶段回复无法提交事务,则不会发生第二个阶段。)