SQLTransact-落实或回滚事务

SQLTransact() 落实或回滚连接中的当前事务。

将落实或回滚自连接时间或对 SQLTransact() 的先前调用 (以最新者为准) 以来对数据库进行的所有更改。

如果事务在连接上处于活动状态,那么应用程序必须先调用 SQLTransact() ,然后才能与数据库断开连接。

语法

SQLRETURN SQLTransact (SQLHENV        henv,
                       SQLHDBC        hdbc,
                       SQLSMALLINT    fType);

函数自变量

表 1. SQLTransact 自变量
数据类型 自变量 使用 描述
SQL经 V henv 输入 环境句柄。

如果 hdbc 是有效的连接句柄,那么将忽略 henv

SQLHDBC hdbc 输入 数据库连接句柄。

如果 hdbc 设置为 SQL_NULL_HDBC ,那么 henv 必须包含与连接关联的环境句柄。

SQLSMALLINT fType 输入 事务的所需操作。 此自变量的值必须是下列其中一项:
  • SQL_COMMIT
  • SQL_ROLLBACK
  • SQL_COMMIT_HOLD
  • SQL_ROLLBACK_HOLD

用法

使用 SQL_COMMIT 或 SQL_ROLLBACK 完成事务具有以下效果:
  • 在调用 SQLTransact()之后,语句句柄仍然有效。
  • 游标名称,绑定参数和列绑定在事务中仍然存在。
  • 将关闭打开的游标,并且将废弃所有暂挂检索的结果集。

使用 SQL_COMMIT_HOLD 或 SQL_ROLLBACK_HOLD 完成事务仍会落实或回滚数据库更改,但不会导致游标关闭。

如果当前没有事务在连接上处于活动状态,那么调用 SQLTransact() 对数据库服务器没有影响,并返回 SQL_SUCCESS。

由于连接丢失, SQLTransact() 在执行 COMMIT 或 ROLLBACK 时可能失败。 在这种情况下,应用程序可能无法确定是否已处理 COMMIT 或 ROLLBACK ,并且可能需要数据库管理员的帮助。 请参阅 DBMS 产品信息,以获取有关事务日志和其他事务管理任务的更多信息。

返回码

  • SQL_SUCCESS
  • SQL_ERROR
  • SQL_INVALID_HANDLE

诊断

表 2。 SQLTransact SQLSTATEs
SQLSTATE 描述 说明
08003 连接未打开 hdbc 未处于已连接状态。
08007 事务期间连接失败 在函数处理期间,与 hdbc 关联的连接失败,无法确定请求的 COMMIT 或 ROLLBACK 是在失败之前发生。
58004 系统错误 不可恢复的系统错误。
HY001 内存分配失败 驱动程序无法分配支持功能处理或完成所需的内存。
HY012 事务操作状态无效 为自变量 fType 指定的值既不是 SQL_COMMIT ,也不是 SQL_ROLLBACK。
HY013 * 内存管理问题 驱动程序无法访问支持处理或完成功能所需的内存。

示例

请参阅 SQLFetch-Fetch next row 中的示例