文章編號: 187289 - 上次校閱: 2004年7月1日 - 版次: 1.2

如何實作與 Oracle 巢狀的交易

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
全部展開 | 全部摺疊

結論

ADO 和 ODBC 並不支援巢狀的交易。不過,原生 Oracle SQL 支援可用來模擬巢狀的交易儲存點關鍵字。

其他相關資訊

「 Microsoft 知識庫 」 文章 177138? (http://support.microsoft.com/kb/177138/EN-US/ ) ,名為"資訊:: 巢狀交易尚未可用在 ODBC/OLE DB/ADO"說這巢狀交易的相關:
"既非開放式資料庫連接 (ODBC,也任何已發行的 Microsoft OLE DB 提供者支援 Nested 交易。如果基礎提供者公開,ActiveX 資料物件 (ADO) 支援但是只有 「 」 功能。 目前沒有 Microsoft 的 OLE DB 提供者支援 Nested 交易"

是如此 Microsoft ODBC Oracle 驅動程式。不過,利用儲存點關鍵字可以模擬巢狀交易。如需有關巢狀交易的原生 ODBC 或 ADO 支援的詳細資訊,請參閱上述 「 文件。

儲存點關鍵字基本上 Oracle 工作階段中設定未認可的陳述式的書籤。您可以復原這些陳述式使用 TO 選項使用 ROLLBACK 陳述式。這個所有具有您可以透過 Execute 陳述 (例如 <connection>.Execute 的形式) 完成,因為 ODBC 剖析器無法正確剖析儲存點關鍵字。

下列程式碼說明如何使用這全部:
    Conn = "UID=****;PWD=****;DRIVER={Microsoft ODBC for Oracle};" _
            & "SERVER=SamOracle;"

    Set Cn = New ADODB.Connection

    With Cn
        .ConnectionString = Conn
        .CursorLocation = adUseClient
        .Open
    End With

    Cn.BeginTrans
    Cn.Execute "SAVEPOINT ALPHA"
    Cn.Execute "INSERT INTO trantest VALUES(1,10)"
    Cn.Execute "INSERT INTO trantest VALUES(2,10)"
    Cn.Execute "SAVEPOINT BETA"
    Cn.Execute "INSERT INTO trantest VALUES(3,10)"
    Cn.Execute "INSERT INTO trantest VALUES(4,10)"
    Cn.Execute "ROLLBACK TO SAVEPOINT BETA"
    Cn.Execute "COMMIT"
    Cn.RollbackTrans
				
注意: 這會假設 Trantest"存在於 Oracle 伺服器的資料表。

這個程式碼將會認可前兩個 INSERT 陳述式和復原第二個兩個。您會發現使用一個連線層級 BeginTrans 和 CommitTrans 住整個系列的陳述式。這是必要的以便 SQLSetConnectOption SQL_AUTOCOMMIT 設為 SQL_AUTOCOMMIT_OFF ODBC API] 層級。當您完成您的異動之後最好透過執行一個 CommitTrans 或一個 RollbackTrans re-set SQL_AUTOCOMMIT SQL_AUTOCOMMIT_ON (預設值)。因為您已經認可或復原備份您的交易與執行陳述式,沒關係是否呼叫 CommitTrans 或 RollbackTrans ; 不論是哪一種方式他們必須做任何事認可或復原。您只呼叫這些函式,以重設 SQL_AUTOCOMMIT SQL_AUTOCOMMIT_ON 要它們都這麼做。

?考

如需取得 Microsoft 資料存取元件 (MDAC) 堆疊 (其中包含 Microsoft ODBC Oracle 驅動程式) 資訊,請參閱下列 「 Microsoft 知識庫 」 文件:
175018? (http://support.microsoft.com/kb/175018/EN-US/ ) 如何取得及安裝 Microsoft Oracle ODBC 驅動程式
如需有關巢狀交易與 ODBC,並請參閱下列 「 Microsoft 知識庫 」 文件:
177138? (http://support.microsoft.com/kb/177138/EN-US/ ) 資訊: 無法使用 ODBC/OLE DB/ADO 的巢狀的交易
如在 Oracle 中使用 ADO 資訊,請參閱下列 「 Microsoft 知識庫 」 文件:
176936? (http://support.microsoft.com/kb/176936/EN-US/ ) 資訊: Visual Basic 5.0 存取使用 ADO Oracle 資料庫

這篇文章中的資訊適用於:
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Open Database Connectivity 2.0
  • Microsoft Open Database Connectivity 2.0
  • Microsoft Open Database Connectivity 2.0
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.0
  • Microsoft ActiveX Data Objects 1.5
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft ActiveX Data Objects 2.1
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft ActiveX Data Objects 2.6
  • Microsoft ActiveX Data Objects 2.7
關鍵字:?
kbmt kbdatabase kbdriver kbhowto kboracle KB187289 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:187289? (http://support.microsoft.com/kb/187289/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。