在 ODBC 中执行事务

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)

重要

SQL Server Native Client (SNAC) 未随附:

  • SQL Server 2022 (16.x) 及更高版本
  • SQL Server Management Studio 19 及更高版本

不建议使用 SQL Server Native Client(SQLNCLI 或 SQLNCLI11)和旧的 Microsoft OLE DB Provider for SQL Server (SQLOLEDB)进行新的应用程序开发。

对于新项目,请使用以下驱动程序之一:

对于作为 SQL Server 数据库引擎组件(版本 2012 到 2019)随附的 SQLNCLI,请参阅此支持生命周期特例

ODBC 中的事务按连接级别进行管理。 在应用程序完成某一事务时,它提交或回滚通过该连接上的所有语句句柄完成的所有工作。 若要提交或回滚事务,应用程序应调用 SQLEndTran ,而不是提交 COMMIT 或 ROLLBACK 语句。

应用程序调用 SQLSetConnectAttr 在管理事务的两种 ODBC 模式之间切换:

  • 自动提交模式

    每个语句都在成功完成后自动提交。 当您在自动提交模式中运行时,不要求其他事务管理功能。

  • 手动提交模式

    所有执行的语句都包含在同一事务中,直到通过调用 SQLEndTran 来专门停止该语句。

自动提交模式是针对 ODBC 的默认的事务模式。 建立连接后,它处于自动提交模式,直到 调用 SQLSetConnectAttr ,通过关闭自动提交模式切换到手动提交模式。 在应用程序关闭自动提交后,发送到数据库的下一个语句将开始某一事务。 然后,事务将一直有效,直到应用程序使用SQL_COMMIT或SQL_ROLLBACK选项调用 SQLEndTran 。 在 SQLEndTran 启动下一个事务后发送到数据库的命令。

如果应用程序从手动提交模式切换到自动提交模式,则驱动程序将提交在该连接上当前打开的所有事务。

ODBC 应用程序不应使用 Transact-SQL 事务语句(例如 BEGIN TRANSACTION、COMMIT TRANSACTION 或 ROLLBACK TRANSACTION),因为这可能导致驱动程序中的不确定行为。 ODBC 应用程序应以自动提交模式运行,而不使用任何事务管理功能或语句,或在手动提交模式下运行,并使用 ODBC SQLEndTran 函数提交或回滚事务。

另请参阅

执行事务 (ODBC)