事务支持

对事务的支持程度是驱动程序定义的。 ODBC 是为在单用户或桌面数据库上实现而设计的,这种数据库不需要管理对其数据的多次更新。 此外,某些支持事务的数据库仅针对 SQL 的数据操作语言 (DML) 语句执行此操作;当事务处于活动状态时,存在有关使用数据定义语言 (DDL) 的限制或特殊事务语义。 也就是说,可能存在同时对表进行多个更新的事务支持,但不能在事务期间更改表的数量和定义。

应用程序通过使用 SQL_TXN_CAPABLE 选项调用 SQLGetInfo 来确定是否支持事务、是否可以将 DDL 包含在事务中以及包括 DDL 的任何特殊效果。 有关详细信息,请参阅 SQLGetInfo 函数说明。

如果驱动程序不支持事务,但应用程序能够(使用 ODBC 以外的 API)锁定和解锁数据,则应用程序可以通过根据需要锁定和解锁记录和表来实现事务支持。 如果要实现帐户转移示例,应用程序将锁定这两个帐户的记录、复制当前值、借记第一个帐户、贷记第二个帐户,并解锁记录。 如果任何步骤失败,应用程序将使用副本重置帐户。

即使是支持事务的数据源也可能无法在特定环境中一次支持多个事务。 应用程序使用 SQL_MULTIPLE_ACTIVE_TXN 选项调用 SQLGetInfo,以确定数据源是否可以在同一环境中的多个连接上同时支持活动事务。 由于每个连接都有一个事务,因此只对与同一数据源建立多个连接的应用程序有意义。