.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リファレンス”を参照してください。