SQLTransact-落实或回滚事务
SQLTransact()
落实或回滚连接中的当前事务。
将落实或回滚自连接时间或对 SQLTransact()
的先前调用 (以最新者为准) 以来对数据库进行的所有更改。
如果事务在连接上处于活动状态,那么应用程序必须先调用 SQLTransact()
,然后才能与数据库断开连接。
语法
SQLRETURN SQLTransact (SQLHENV henv,
SQLHDBC hdbc,
SQLSMALLINT fType);
函数自变量
数据类型 | 自变量 | 使用 | 描述 |
---|---|---|---|
SQL经 V | henv | 输入 | 环境句柄。 如果 hdbc 是有效的连接句柄,那么将忽略 henv 。 |
SQLHDBC | hdbc | 输入 | 数据库连接句柄。 如果 hdbc 设置为 SQL_NULL_HDBC ,那么 henv 必须包含与连接关联的环境句柄。 |
SQLSMALLINT | fType | 输入 | 事务的所需操作。 此自变量的值必须是下列其中一项:
|
用法
使用 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
诊断
SQLSTATE | 描述 | 说明 |
---|---|---|
08003 | 连接未打开 | hdbc 未处于已连接状态。 |
08007 | 事务期间连接失败 | 在函数处理期间,与 hdbc 关联的连接失败,无法确定请求的 COMMIT 或 ROLLBACK 是在失败之前发生。 |
58004 | 系统错误 | 不可恢复的系统错误。 |
HY001 | 内存分配失败 | 驱动程序无法分配支持功能处理或完成所需的内存。 |
HY012 | 事务操作状态无效 | 为自变量 fType 指定的值既不是 SQL_COMMIT ,也不是 SQL_ROLLBACK。 |
HY013 * | 内存管理问题 | 驱动程序无法访问支持处理或完成功能所需的内存。 |
示例
请参阅 SQLFetch-Fetch next row 中的示例