ページの先頭行へ戻る
Interstage Shunsaku Data Manager V9.0.6 アプリケーション開発ガイド
FUJITSU Software

5.3 .NET APIでトランザクションを使う

.NET APIを利用したアプリケーションの作成例を説明します。

XML文書の削除および更新を1トランザクションとして扱う例を以下に示します。


図5.3 XML文書の削除および更新を1トランザクションとして扱う例


C# .NETでの記述例

/*
 * 以下のように用意されていることを仮定しています。
 *  sQuery :検索式を格納した文字列
 *  sReturn :リターン式を格納した文字列
 *  updateData :更新データを格納した文字列
 */

ShunService service = null; 

try {
  // ShunServiceを作成
  service = new ShunService();
  service.Host = "DirSvr1";
  service.Port = 23101; 
  service.Connect();

  // ShunSearchRequirementを作成
  ShunSearchRequirement req = new ShunSearchRequirement();
  req.QueryExpression  = sQuery; 
  req.ReturnExpression = sReturn; 
  req.ReplyNumber      = 1;
  req.RequestCount     = 30; 

  // 検索を実行
  ShunResultSet rs = service.Search( req ); 

  // 自動コミットを無効に切替え
service.AutoCommit = false; (1) try { // 3番目のデータを削除対象に設定 ShunRecordCollection deleteRecCol = new ShunRecordCollection(); deleteRecCol.Add( rs.Records[2] ); // データを削除 service.Delete( deleteRecCol ); // 5番目のデータを更新対象に設定 ShunRecordCollection updateRecCol = new ShunRecordCollection(); ShunRecord record = rs.Records[4]; record.Data = updateData; updateRecCol.Add( record ); // データを更新 service.Update( updateRecCol ); // コミットの実行
service.Commit(); (2) } catch { if ( service.State == ShunConnectionState.Open ) { // ロールバックの実行
service.Rollback(); (3)
} throw; } service.Disconnect(); } catch ( ShunContinuousException e ) { // ShunContinuousExceptionが発生した場合の処理を記述 try { if( service != null && service.State == ShunConnectionState.Open ) { service.Disconnect(); } } catch( ShunException ex ) { Console.WriteLine("エラーメッセージ : {0}", ex.Message ); } Console.WriteLine("エラーメッセージ : {0}", e.Message ); } catch ( ShunTransactionRolledbackException e ) { // ShunTransactionRolledbackExceptionが発生した場合の処理を記述 try { if( service != null && service.State == ShunConnectionState.Open ) { service.Disconnect(); } } catch( ShunException ex ) { Console.WriteLine("エラーメッセージ : {0}", ex.Message ); } Console.WriteLine("エラーメッセージ : {0}", e.Message ); } catch ( ShunConnectionTerminatedException e ) { // ShunConnectionTerminatedExceptionが発生した場合の処理を記述 Console.WriteLine("エラーメッセージ : {0}", e.Message ); }

VB .NETでの記述例

' 以下のように用意されていることを仮定しています。
' sQuery :検索式を格納した文字列
' sReturn :リターン式を格納した文字列
' updateData :更新データを格納した文字列

Dim service As ShunService = Nothing

Try
  ' ShunServiceを作成
  service = New ShunService()
  service.Host = "DirSvr1"
  service.Port = 23101
  service.Connect()

  ' ShunSearchRequirementを作成
  Dim req As ShunSearchRequirement = New ShunSearchRequirement()
  req.QueryExpression  = sQuery
  req.ReturnExpression = sReturn
  req.ReplyNumber      = 1
  req.RequestCount     = 30

  ' 検索を実行
  Dim rs As ShunResultSet = service.Search( req )

  ' 自動コミットを無効に切替え
service.AutoCommit = False (1) Try ' 3番目のデータを削除対象に設定 Dim deleteRecCol As ShunRecordCollection = New ShunRecordCollection() deleteRecCol.Add( rs.Records(2) ) ' データを削除 service.Delete( deleteRecCol ) ' 5番目のデータを更新対象に設定 Dim updateRecCol As ShunRecordCollection = New ShunRecordCollection() Dim record As ShunRecord = rs.Records(4) record.Data = updateData updateRecCol.Add( record ) ' データを更新 service.Update( updateRecCol ) ' コミットの実行
service.Commit() (2) Catch If service.State = ShunConnectionState.Open ' ロールバックの実行 service.Rollback() (3) End If Throw End Try service.Disconnect() Catch e As ShunContinuousException ' ShunContinuousExceptionが発生した場合の処理を記述 Try If Not service Is Nothing And service.State = ShunConnectionState.Open Then service.Disconnect() End If Catch ex As ShunException Console.WriteLine("エラーメッセージ : {0}", ex.Message ) End Try Console.WriteLine("エラーメッセージ : {0}", e.Message ) Catch e As ShunTransactionRolledbackException ' ShunTransactionRolledbackExceptionが発生した場合の処理を記述 Try If Not service Is Nothing And service.State = ShunConnectionState.Open Then service.Disconnect() End If Catch ex As ShunException Console.WriteLine("エラーメッセージ : {0}", ex.Message ) End Try Console.WriteLine("エラーメッセージ : {0}", e.Message ) Catch e As ShunConnectionTerminatedException ' ShunConnectionTerminatedExceptionが発生した場合の処理を記述 Console.WriteLine("エラーメッセージ : {0}", e.Message ) End Try

(1)自動コミットを無効に切替え

ShunServiceクラスのAutoCommitプロパティで、自動コミットを無効に切り替えます。


ポイント

ShunServiceオブジェクト作成時は、自動コミットが有効になっていますので、切替えが必要です。
再度自動コミットを有効にしたい場合は、AutoCommitプロパティにtrueを設定します。


(2)コミットの実行

トランザクションを終了し、それまでの操作をShunsakuに反映したい場合は、Commitメソッドを実行します。


(3)ロールバックの実行

エラーが発生したときなど、それまでの操作をShunsakuに反映しないでトランザクションをロールバックする場合は、Rollbackメソッドを実行します。


参照

.NET APIの詳細については、“.NET APIリファレンス”を参照してください。