> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kasoftware.com/llms.txt
> Use this file to discover all available pages before exploring further.

# dbEndTransaction

> 指示顯式 SQL 交易的結束，並提供提交或復原選項。

export const siteNameShort = "知行之橋";

指示使用 [dbBeginTransaction](./op-db-begin-transaction) 建立的顯式 SQL 交易結束，並提供提交或復原交易的選項。將此操作與 dbBeginTransaction 配合使用，在 dbBeginTransaction 和 dbEndTransaction 呼叫之間執行其他資料庫操作。有關詳細資訊，請參閱[範例](#範例)。

## 必需的參數

* **driver**：跨平臺版本中的 JDBC 驅動程式類名稱，或 .NET 版本中的 ADO.NET 提供程式名稱。
* **conn**：連接字串或資料庫 URL。
* **transactionid**：由 dbBeginTransaction 建立的交易 ID。
* **transactionaction**：是否提交或復原交易。允許的值為 `commit` 和 `rollback`。

## 範例

在此範例中，在 dbBeginTransaction 和 dbEndTransaction 之間執行資料庫查詢，從而建立 SQL 交易。為了確定交易的狀態，需要檢查每個查詢的狀態。如果所有查詢都成功，則提交交易；否則復原交易。

```xml theme={null}
<!-- Creating the input item and defining the SQL queries -->
<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>
    <!-- Enumerate and execute all queries and set the transactionaction based on the result -->
    <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>
      <!-- If any queries were flagged as rollback, stop running the queries -->
      <arc:if exp="[db.transactionaction | equals('ROLLBACK')]">
        <arc:break />
      </arc:if>
    </arc:enum>
    <!-- If any exception is raised, catch it and set the transactionaction to rollback -->
    <arc:catch>
      <arc:set attr="db.transactionaction" value="ROLLBACK" />
    </arc:catch>
    <!-- Finally, call dbEndTransaction to either commit or roll back the SQL transaction -->
    <arc:finally>
      <arc:set attr="db.transactionid" value="[dbbeginout.transactionid]" />
      <arc:call op="dbEndTransaction" in="db" />
    </arc:finally>
  </arc:try>
</arc:call>
```

只要在安裝並執行 {siteNameShort} 的計算機上安裝了驅動程式，就可以修改上面的範例以定位其他資料庫。針對 .NET 調整此範例時，需要按如下方式更改 `driver` 和 `conn` 輸入：

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