トランザクションの有効範囲について

トランザクションの有効範囲について教えてください。
ODOSを利用したアプリケーションのトランザクションの有効範囲は、通常、SQL文ごとに制御されています。ただし、明示的にトランザクションの有効範囲を制御することもできます。

【トランザクションの開始】
トランザクションは、通常、SQL文を実行することで開始されます。

【トランザクションの終了】
トランザクションは、コミットまたはロールバックを実行することで終了します。

 コミット : すべての変更を保存してトランザクションを終了します。
 ロールバック : すべての変更をキャンセルしてトランザクションを終了します。

【トランザクションを明示的に制御していない場合の有効範囲】
トランザクションはSQL文を実行することで開始され、SQL文の実行完了後すぐにコミットで終了します。
ただし、SELECT文を実行し結果セット(rdoResultsetオブジェクト、Recordsetオブジェクト、OdbcDataReaderオブジェクト)を参照した場合は以下のようになります。

  • RDOを利用する場合
    - 結果セットをクローズするまでトランザクションは継続します。
     以下のメソッドを実行することでコミットされます。
      rdoResultset.Closeメソッド


  • ADOを利用する場合
    - Recordset.Openメソッドの第3パラメーターにadOpenForwardOnlyを指定した場合
     最終行の読み取り完了後にコミットされます。

    - Recordset.Openメソッドの第3パラメーターにadOpenStaticを指定した場合
     結果セットをクローズするまでトランザクションは継続します。
     以下のメソッドを実行することでコミットされます。
      Recordset.Closeメソッド


  • ADO.NETを利用する場合
    - OdbcDataReaderを利用して参照した場合
     最終行の読み取り完了後にコミットされます。

    - DataSet(OdbcDataAdapter)を利用して参照した場合
     OdbcDataAdapter.Fillメソッド完了後にコミットされます。


【アプリケーションでトランザクションの有効範囲を明示的に制御する方法】
トランザクションを明示的に制御するには、以下をメソッド利用します。

  • RDOを利用する場合
    開始 rdoConnection.BeginTransメソッド
    コミット rdoConnection.CommitTransメソッド
    ロールバック rdoConnection.RollbackTransメソッド


  • ADOを利用する場合
    開始 Connection.BeginTransメソッド
    コミット Connection.CommitTransメソッド
    ロールバック Connection.RollbackTransメソッド


  • ADO.NETを利用する場合
    開始 OdbcConnection.BeginTransactionメソッド
    コミット OdbcTransaction.Commitメソッド
    ロールバック OdbcTransaction.Rollbackメソッド


詳細は、以下の「関連FAQ」を参照してください。

関連FAQ:
トランザクションの制御方法について教えてください。

【結果セットを使用した場合の注意事項】
結果セットは、トランザクションを終了させた場合、読み込み途中であってもクローズされます。結果セットを参照中にはトランザクションを終了させないようにしてください
トランザクションを明示的に制御していない場合、結果セットを参照中の同一コネクションで他の更新系SQL文を実行した場合も、結果セットはクローズされます。
複数の結果セットを同時に参照する場合や、結果セットを参照中に他の更新系SQL文を実行する場合には、トランザクションを明示的に制御してください。

製品・サービス区分 Symfoware
製品・サービス情報
対象製品 Symfoware Server (Native Interface)
プラットフォーム Windows, Solaris, Linux
アンサー種別 技術サポート