对事务的支持程度是驱动程序定义的。 ODBC 设计为在无需管理其数据的多个更新的单用户或桌面数据库上实现。 此外,某些支持事务的数据库仅针对 SQL 的数据操作语言 (DML) 语句执行此操作;当事务处于活动状态时,存在有关使用数据定义语言(DDL)的限制或特殊事务语义。 也就是说,事务可能支持对多个表进行同时更新,但不支持在事务过程中更改表的数量和定义。
应用程序通过使用 SQL_TXN_CAPABLE 选项调用 SQLGetInfo,以确定事务是否受支持、是否可以将 DDL 包含在事务中,以及在事务中包括 DDL 的任何特殊效果。 有关详细信息,请参阅 SQLGetInfo 函数说明。
如果驱动程序不支持事务,但应用程序能够(使用 ODBC 以外的 API)锁定和解锁数据,则应用程序可以通过根据需要锁定和解锁记录和表来实现事务支持。 若要实现帐户转移示例,应用程序将锁定这两个帐户的记录,复制当前值,借记第一个帐户,信用第二个帐户,并解锁记录。 如果任何步骤失败,应用程序将使用副本重置帐户。
即使是支持事务的数据源也可能无法在特定环境中一次支持多个事务。 应用程序使用 SQL_MULTIPLE_ACTIVE_TXN 选项调用 SQLGetInfo ,以确定数据源是否可以在同一环境中多个连接上同时支持活动事务。 由于每个连接对应一个事务,因此,这个特性仅对与同一数据源建立多个连接的应用程序才相关。