Skip to content

关于自动提交问题

ODBC数据源的参数配置中的自动提交(AutoCommit),其默认值为true,即命令发送到数据库服务端后,自动提交。

在当自动提交参数设置为 false 时,命令发往服务端后,需要用户显式调用SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT),之前的操作才会被提交,否则被回滚。但有时并未调用上述接口,却依然提交了SQL语句,这是为什么?

解答

在事务中执行了DDL语句。执行Create Table 、Truncate Table等DDL语句涉及数据库资源分配回收的问题,这类语句带有COMMIT功能,此语句之前发送的SQL语句会在本条语句执行之前被提交。所以,这类语句会隐式的提交之前的事务,如果涉及用户主动回滚则需要注意这类SQL语句。