![]() |
連載:Visual Studio 2005によるWindowsデータベース・プログラミング第8回 テーブルアダプタでトランザクションデジタルアドバンテージ 遠藤 孝信2008/04/25 |
|
|
前回では、マスタ/詳細テーブルにおける更新処理ということで、リレーションシップが設定されている2つのテーブルのレコードを、整合性を保ちながら追加/更新/削除する手順について解説しました。
具体的には、図1のような構造のデータセットに格納された注文データと注文明細データの編集を、図2のような画面のアプリケーションで行えるようにしました。
![]() |
| 図1 前回、前々回で使用しているデータセットの構造(第6回の図12の再掲) |
![]() |
| 図2 サンプル・アプリケーションの実行画面(第6回の図1の再掲) |
| 画面の上半分で注文データの編集を、下半分(グリッド)で1つの注文に含まれる注文明細データの編集が行える。 |
サンプル・アプリケーションでは、画面上で編集したデータは、ツールバーの[データの保存]ボタン(
)をクリックすることにより保存できます。これは、データテーブルにバインドされたコントロールを経由して編集されたデータセットの内容を、テーブルアダプタのUpdateメソッドを呼び出すことにより、データベースのテーブルに反映させるという処理です。
テーブル間にはリレーションシップによる外部キー制約が設定されているため、この処理を行う際には、更新するテーブルの順序について考慮する必要があります。つまり、削除処理と追加処理については、次のような順序で行う必要がありました。
- 削除処理: 注文明細テーブルを更新 → 注文テーブルを更新
- 追加処理: 注文テーブルを更新 → 注文明細テーブルを更新
ここまでが前回までの内容でした。以上の内容で取りあえずはテーブルの編集が可能ですが、実は万全ではありません。
例えば削除処理において、注文明細テーブルの更新(=レコードの削除)が完了した直後に、コンピュータの電源が抜けてしまった場合を考えてみてください。この場合には注文明細データが削除されたのに、その親データである注文データは削除されません。従って、復旧後には、注文データのみが削除されずにテーブルに残っているという不完全な状況が発生してしまいます。
このようなデータベースの不整合は、どのようなシステムにおいても致命的で、最も避けなければならない状態です。この問題に対処するために、たいていのデータベース・システムには「トランザクション処理」という機能が備わっています。
トランザクション処理とは
「トランザクション」とは関連した複数のデータベース処理のことで、「トランザクション処理」はこれらをひとまとめにし、それらの処理が「すべて成功する」か「すべて失敗する」かのいずれかになるように管理する機能です。
トランザクションに含まれるすべての処理が無事に完了した場合には、アプリケーションではトランザクションを「コミット(commit)」します。これによりすべての処理は成功したことになり、その結果はすべてデータベースに反映されます。
もし処理が1つでも失敗した場合には、アプリケーションはトランザクションを「ロールバック(rollback)」できます。これにより、それまでの処理はすべて取り消され、データベースはトランザクションを開始した時点の状態に戻ります。コミットもロールバックもせずにトランザクションが終了してしまった場合には、処理は自動的にロールバックされ、やはりトランザクション内の処理はすべて取り消されます。
先ほどの削除処理の例でいうと、注文明細データの削除処理と注文データの削除処理の2つの処理を1つのトランザクションにします(トランザクションに参加させます)。そして、それぞれのテーブルの更新が完了した場合にのみ、コミットを行います。更新が完了しなかった場合には、ロールバックするか、あるいは、コミットせずにトランザクションを終了すればトランザクションはロールバックされます。ただし、テーブルの更新(Updateメソッドの呼び出し)が失敗するような場合には、何か致命的な、復旧作業が必要となるような問題が起こっているときなので、アプリケーションは異常終了することになると思われます。
いずれにせよトランザクション処理を行っておけば、更新が完了しなかった場合にも、どのデータも削除されていない元の状態(最後に保存された状態)に戻ります。ユーザーは再度作業を行わなければなりませんが、障害によりデータが不完全な状態になることはありません。
トランザクション処理はデータベース・システムの機能ですが、当然ながら、それを制御するためのクラスが.NETのクラス・ライブラリには用意されています。今回はそれについて解説し、前回までに作成したサンプル・アプリケーションにその機能を追加するのが目的ですが、その前に、トランザクションを使わなかった場合のデータベースの不整合を実際に確認してみましょう。
| INDEX | ||
| Visual Studio 2005によるWindowsデータベース・プログラミング | ||
| 第8回 テーブルアダプタでトランザクション | ||
| 1.トランザクション処理とは | ||
| 2.データベース不整合の確認 | ||
| 3.TransactionScopeクラスによるトランザクション | ||
| 4.分散トランザクションとMSDTC/テーブルアダプタとトランザクション | ||
| 「Visual Studio 2005によるWindowsデータベース・プログラミング」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
は.NET開発者中心に生まれ変わりました
スポンサーからのお知らせ
.NET開発者中心コーナー
- - PR -
イベントカレンダー
- - PR -




