SQLEndTran -確定或回復交易
SQLEndTran() 確定或回復連線中的現行交易。
自連接時間或前次呼叫 SQLEndTran()(以最新者為準) 後,對資料庫所做的所有連線變更都會確定或回復。
如果連線上的交易處於作用中狀態,應用程式必須先呼叫 SQLEndTran() ,然後才能切斷與資料庫的連線。
語法
SQLRETURN SQLEndTran (SQLSMALLINT hType,
SQLHENV handle,
SQLSMALLINT fType); 函數引數
| 資料類型 | 引數 | 使用 | 說明 |
|---|---|---|---|
| SQLSMALLINT | hType | 輸入 | 控點類型。 它必須包含 SQL_HAND_ENV 或 SQL_HANDLE_DBC。 |
| SQLHenV | 控點 (handle) | 輸入 | 執行 COMMIT 或 ROLLBACK 時要使用的控點。 |
| SQLSMALLINT | fType | 輸入 | 交易的所需動作。 此引數的值必須是下列其中一項:
|
用法
使用 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
診斷
| 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 * | 記憶體管理問題 | 驅動程式無法存取支援處理或完成函數所需的記憶體。 |