對資料指標和已備妥陳述式的交易影響

認可或復原交易對資料指標和存取計劃產生下列其中一種影響:

  • 所有資料指標都會關閉,而且會刪除該連線上準備的陳述式有關的存取計劃,或

  • 所有資料指標都會關閉,而且該連線上準備的陳述式有關的存取計劃會保持不變,或

  • 所有資料指標都會保持開啟,而且該連線上準備的陳述式有關的存取計劃會保持不變。

例如,假設資料來源會在此清單中顯示第一個行為,這些行為最嚴格。 現在假設應用程式會執行下列動作:

  1. 將認可模式設定為手動認可。

  2. 在陳述式 1 上建立銷售訂單的結果集。

  3. 使用者反白顯示該訂單時,在陳述式 2 上建立銷售訂單的結果集。

  4. 使用者更新行時,呼叫 SQLExecute 執行陳述式 3 上準備的定點更新陳述式。

  5. 呼叫 SQLEndTran 認可定點更新陳述式。

由於資料來源的行為,因此在步驟 5 中呼叫 SQLEndTran 會導致其關閉陳述式 1 和 2 上的資料指標,並且刪除所有陳述式的存取計劃。 應用程式必須重新執行陳述式 1 和 2,才能重新建立結果集,並在陳述式 3 上重新準備陳述式。

在自動認可模式中,SQLEndTran 以外的函式會認可交易:

  • SQLExecuteSQLExecDirect 在上述範例中,步驟 4 中的 SQLExecute 呼叫會認可交易。 這會導致資料來源關閉陳述式 1 和 2 上的資料指標,並刪除該連接上所有陳述式的存取計劃。

  • SQLBulkOperationsSQLSetPos 在上述範例中,假設在步驟 4 中,應用程式會在陳述式 2 上呼叫具有 SQL_UPDATE 選項的 SQLSetPos,而不是在陳述式 3 上執行定點更新陳述式。 這會認可交易,並讓資料來源關閉陳述式 1 和 2 上的資料指標,並捨棄該連線上的所有存取計劃。

  • SQLCloseCursor 在上述範例中,假設當使用者反白顯示不同的銷售訂單時,應用程式會在陳述式 2 上呼叫 SQLCloseCursor,然後再建立新銷售訂單的行結果。 對 SQLCloseCursor 的呼叫會認可 SELECT 陳述式,該陳述式會建立行的結果集,並讓資料來源關閉陳述式 1 上的資料指標,然後捨棄該連接上的所有存取計劃。

應用程式,特別是使用者捲動結果集和更新或刪除資料列的螢幕應用程式,必須小心處理此行為的程式碼。

若要判斷資料來源在認可或復原交易時的行為,應用程式會使用 SQL_CURSOR_COMMIT_BEHAVIOR 和 SQL_CURSOR_ROLLBACK_BEHAVIOR 選項呼叫 SQLGetInfo