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