dbEndTransaction

Version 24.2.9039


dbEndTransaction


指示使用 dbBeginTransaction 创建的显式 SQL 事务的结束,并提供提交或回滚事务的选项。 将此操作与 dbBeginTransaction 一起使用,其中其他数据库操作在对 dbBeginTransaction 和 dbEndTransaction 的调用之间执行。 有关详细信息,请参阅示例

必需的参数

  • driver: 跨平台版本 中的 JDBC 驱动程序类名称 或 .NET 版本
  • conn:连接字符串或数据库 URL。
  • transactionid: dbBeginTransaction 创建的事务的 Id。
  • transactionaction: 是否提交或回滚事务。 允许的值为commitrollback

可选的参数

  • user: 为初始化 JDBC 连接对象而传递的数据库用户名。也可在 JDBC URL 中设置。
  • password: 为初始化 JDBC 连接对象而传递的数据库密码。也可在 JDBC URL 中设置。
  • transactionid: 此事务的 ID。
  • transactionaction: 事务的动作。允许的值 commit, rollback

示例

在此示例中,在 dbBeginTransaction 和 dbEndTransaction 之间执行数据库查询,创建 SQL 事务。 为了确定事务的状态,需要检查每个查询的状态。 如果所有查询都成功,则提交事务; 否则回滚事务。

<!-- 创建输入项并定义 SQL 查询 -->
<arc:set attr="db.driver" value="cdata.jdbc.mysql.MySQLDriver" />
<arc:set attr="db.conn" value="jdbc:cdata:mysql:server=localhost;port=3306;database=sakila;user=root;password=Password123;"/>
<arc:set attr="db.transactionaction" value="COMMIT" />
<arc:set attr="sql.queries#" value="ALTER TABLE Colors ADD Example varchar(255);"/>
<arc:set attr="sql.queries#" value="INSERT INTO Colors VALUES (27, Blue, Sky);" />
<arc:set attr="sql.queries#" value="INSERT INTO Colors VALUES (28, Red, Apple);" />
<arc:set attr="sql.queries#" value="INSERT INTO Colors VALUES (29, Yellow, Banana);" />

<arc:call op="dbBeginTransaction" in="db" out="dbbeginout">
  <arc:try>
    <!-- 枚举并执行所有查询并根据结果设置transactionaction -->
    <arc:enum attr="sql.queries">
      <arc:set attr="db.query" value="[_value]"/>
      <arc:call op="dbNonQuery" in="db" out="results" >
        <arc:set attr="db.transactionaction" value="[results.db:result | equals('success', 'COMMIT', 'ROLLBACK')]" />
      </arc:call>
      <!-- 如果任何查询被标记为回滚,请停止运行查询 -->
      <arc:if exp="[db.transactionaction | equals('ROLLBACK')]">
        <arc:break />
      </arc:if>
    </arc:enum>
    <!-- 如果引发任何异常,捕获它并将事务操作设置为回滚 -->
    <arc:catch>
      <arc:set attr="db.transactionaction" value="ROLLBACK" />
    </arc:catch>
    <!-- 最后,调用 dbEndTransaction 来提交或回滚 SQL 事务 -->
    <arc:finally>
      <arc:set attr="db.transactionid" value="[dbbeginout.transactionid]" />
      <arc:call op="dbEndTransaction" in="db" />
    </arc:finally>
  </arc:try>
</arc:call>

只要在安装并运行知行之桥的计算机上安装驱动程序,就可以修改上面的示例以定位其他数据库。 针对 .NET 调整此示例涉及更改driverconn输入,如下所示:

<arc:set attr="db.driver" value="System.Data.CData.MySql" /> 
<arc:set attr="db.conn" value="Server=localhost;Database=sakila;UID=root;Password=Password123;"/>