では、ASP.NETでは、複数端末からのDB更新でデータを上書きしないようにするためにはどのようにすればいいのであろうか?
Webアプリでは、楽観的排他制御という仕組みを使うことが多い。楽観的排他制御はデータを取得したタイミングと更新しようとするタイミングでDB上のデータが変更されていない場合(=ほかの端末から更新されていない場合)のみ、DB更新を行う方法である。
この楽観的排他制御についても、ASP.NETでは簡単に実装することができる。これついにて、以下で実際に実装してみよう。
この設定を行うことにより、ほかの端末から更新されていた場合にはDB更新を行わないようになる。ただし、このままだと利用者がDB更新に失敗したかどうかは分からない。
次は、DB更新に失敗した場合にメッセージを表示する方法について見ていこう。
まず、DetailsViewコントロールのItemUpdatedイベント・ハンドラを、次の画面の手順で追加する。
次に、追加されたイベント・ハンドラに次のコードを記述する。
Protected Sub DetailsView1_ItemUpdated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewUpdatedEventArgs) Handles DetailsView1.ItemUpdated
If (e.AffectedRows = 0) Then
Label1.Text = "更新できませんでした"
End If
End Sub
DetailsViewコントロールのItemUpdatedイベント・ハンドラ(=DetailsView1_ItemUpdatedメソッド)のパラメータでは、DB更新処理に関する情報が取得できるようになっている。ここで処理結果を判断することにより、利用者へDB更新が成功したかどうかを知らせることができるのである。
実際に実行してみよう。
このように、ほとんどコードを記述することなく、DB更新時にデータの上書きを防ぐ処理を実装することができる。
Copyright© Digital Advantage Corp. All Rights Reserved.