7月25日(火)3、4コマ目

今日、やったこと

C#でトランザクション実装

コミット、ロールバック

ロック

今日のホワイトボード

C#+ODP.NETでトランザクションの実装をしました。

トランザクションを実装するには

〇OracleTransactionオブジェクト取得

トランザクションは最後にコミット、ロールバックを実行する必要があります。

C#+ODP.NETではコミット、ロールバックはOracleTransactionオブジェクトが持つCommit()、Rollback()メソッドで実行します。

このOracleTransactionオブジェクトは接続済み(Open()実行済み)のOracleConnectionオブジェクトのBeginTransaction()で取得できます。

〇複数種類のSQLを同一トランザクションのメンバにする

また、1トランザクションで複数種類のSQLを実行する場合、複数のOracleCommandオブジェクトを使います。この複数のOracleCommandオブジェクトのTransactionプロパティに同じOracleTransactionオブジェクトをセットすることで、同一トランザクションのメンバになります。

図 OracleTransactionオブジェクト


サンプルプログラム1 コミット、ロールバック

ソースコードをあげておきます。

Item.cs

商品情報受け渡し用クラス。いつもプロパティとコンストラクタのクラス。


ItemDAO.cs

ポイントはUpdate()のOracleTransactionを使ったトランザクションに関する実装。

using(){ }を使えば、自動的にClose()を実行してくれる。

図 using(){ }で自動的にClose()実行



Index.cshtml.cs

価格を入力するテキストボックスが増減する可能性があるため、OnPost()の引数で入力値を取得することができない。

そこで、Request.Formプロパティを使って、name属性、value属性の取得を行っている。

図 価格入力用テキストボックスのname属性から対象商品のIDがわかるように
価格入力用テキストボックスのname属性は”price_xx"にしている。
取得したname属性値が”price_xx"か比較するために検索条件に正規表現を使ってあいまい検索をしている。
図 検索条件に正規表現を使ったあいまい検索




Index.cshtml

価格入力用テキストボックスのname属性から対象商品のIDがわかるような名前にしている。


トランザクションサンプル2 ロック

更新をする前に手動でロックするサンプル。

Item.cs

商品情報受け渡し用クラス。おなじみのプロパティとコンストラクタのクラス。


ItemDAO.cs

ポイントはUpdate()。

トランザクションを構成するSQLは

  • ロック+在庫数取得のSQL
  • 在庫数更新のSQL

の2つ。これらを実行するOracleCommandのTransactionプロパティに同じOracleTransactionオブジェクトをセットすることで、同一トランザクションのメンバになる。

コミットすれば、更新確定、ロックは解除。

ロールバックすれば、更新キャンセル、ロックは解除。


Index.cshtml.cs

またまた入力値を取得するためにRequest.Formプロパティを使っている。


Index.cshtml


次回は

夏休み明け。トランザクションの練習問題、確認テストです。


 

このブログの人気の投稿

6月27日(火)1、2コマ目

6月20日(火)1、2コマ目

7月4日(火)1、2コマ目