SQLEndTran -確定或回復交易

SQLEndTran() 確定或回復連線中的現行交易。

自連接時間或前次呼叫 SQLEndTran()(以最新者為準) 後,對資料庫所做的所有連線變更都會確定或回復。

如果連線上的交易處於作用中狀態,應用程式必須先呼叫 SQLEndTran() ,然後才能切斷與資料庫的連線。

語法

SQLRETURN SQLEndTran (SQLSMALLINT    hType,
                      SQLHENV        handle,
                      SQLSMALLINT    fType);

函數引數

表 1. SQLEndTran 引數
資料類型 引數 使用 說明
SQLSMALLINT hType 輸入 控點類型。 它必須包含 SQL_HAND_ENV 或 SQL_HANDLE_DBC。
SQLHenV 控點 (handle) 輸入 執行 COMMIT 或 ROLLBACK 時要使用的控點。
SQLSMALLINT fType 輸入 交易的所需動作。 此引數的值必須是下列其中一項:
  • SQL_COMMIT
  • SQL_ROLLBACK
  • SQL_COMMIT_HOLD
  • SQL_ROLLBACK_HOLD
  • SQL_SAVEPOINT_NAME_ROLLBACK
  • SQL_SAVEPOINT_NAME_RELEASE

用法

使用 SQL_COMMIT 或 SQL_ROLLBACK 完成交易具有下列效果:
  • 在呼叫 SQLEndTran()之後,陳述式控點仍然有效。
  • 游標名稱、連結參數及直欄連結可存活交易。
  • 會關閉開啟的游標,並捨棄任何擱置擷取的結果集。

使用 SQL_COMMIT_HOLD 或 SQL_ROLLBACK_HOLD 完成交易仍會確定或回復資料庫變更,但不會導致關閉游標。

如果連線上目前沒有作用中的交易,則呼叫 SQLEndTran() 不會影響資料庫伺服器,且會傳回 SQL_SUCCESS。

SQLEndTran() 在執行 COMMIT 或 ROLLBACK 時可能會失敗,因為失去連線。 在此情況下,應用程式可能無法判斷是否已處理 COMMIT 或 ROLLBACK ,且可能需要資料庫管理者的協助。 如需交易日誌及其他交易管理作業的相關資訊,請參閱「資料庫管理系統 (DBMS)」產品資訊。

使用 SQL_SAVEPOINT_NAME_ROLLBACK 或 SQL_SAVEPOINT_NAME_RELEASE 時,您必須已使用 SQLSetConnectAttr來設定儲存點名稱。

回覆碼

  • SQL_SUCCESS
  • SQL_ERROR
  • SQL_INVALID_HANDLE

診斷

表 2. SQLEndTran SQLSTATE
SQL狀態 說明 說明
08003 連線未開啟 hdbc 未處於已連接狀態。
08007 交易期間連線失敗 在函數處理期間,與 hdbc 相關聯的連線在函數處理期間失敗,且無法判定失敗之前是否發生所要求的 COMMIT 或 ROLLBACK。
58004 系統錯誤 無法復原的系統錯誤。
HY001 記憶體配置失敗 驅動程式無法配置支援處理或完成函數所需的記憶體。
HY010 函數順序錯誤 已使用 SQL_SAVEPOINT_NAME_ROLLBACK 或 SQL_SAVEPOINT_NAME_RELEASE ,但未透過呼叫屬性 SQL_ATTR_SAVEPOIN_NAME 的 SQLSetConnectAttr() 來建立儲存點名稱。
HY012 交易作業狀態無效 指定給引數 fType 的值既不是 SQL_COMMIT ,也不是 SQL_ROLLBACK。
HY013 * 記憶體管理問題 驅動程式無法存取支援處理或完成函數所需的記憶體。