在 ODBC 中执行事务

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

重要

已从 SQL Server 2022 (16.x) 和 SQL Server Management Studio 19 (SSMS) 中删除SQL Server Native Client(通常缩写为 SNAC)。 不建议在新应用程序开发工作中使用 SQL Server Native Client(SQLNCLI 或 SQLNCLI11)和旧版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB)。 请在此后切换为使用新版 Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server 或最新版的 Microsoft OLE DB Driver for SQL Server。 对于作为 SQL Server 数据库引擎组件随附的 SQLNCLI (版本 2012 到 2019) ,请参阅此支持生命周期异常

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

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

  • 自动提交模式

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

  • 手动提交模式

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

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

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

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

另请参阅

执行事务 (ODBC)