8月17日(火)1、2コマ目

今日、やったこと

C#からオラクルDBアクセス(パラメータマーカーを使う)

今日のホワイトボード

サンプルアプリケーション(OracleDB_sample2)

下図のイメージ。

図 サンプルアプリケーションのイメージ

選択ボタンをクリックすると選択されたグループに属する商品を検索する。

Item.cs、Group.cs

前回と同じ。


GroupDAO.cs

前回と同じ。グループマスタを全件検索するSelectAll()メソッドのみ。


ItemDAO.cs

引数で指定されたグループIDで商品マスタを検索するSelectByGroupId()メソッドを作る。


SQL中にパラメータマーカー(:グループID)、Parameterオブジェクトが登場するが、下図の関係。

図 パラメータマーカーとParameterオブジェクト

Index.cshtml


Index.cshtml.cs

OnGet()メソッドでグループ一覧を取得していたが、選択ボタンクリック時にはOnGet()は実行されないため、グループ一覧は表示されなくなる。

GETでもPOSTでもグループ一覧は必要なので、コンストラクタで取得することに変更。

なお、このIndexModelクラスのインスタンスはリクエスト毎に生成される。


DAOクラス内のメソッドの命名パターン

ありがちパターンは下図のとおり。

図 DAOクラスのメソッド命名パターン

なぜ、パラメータマーカーを使うのか?

セキュリティ的な理由と、DBパフォーマンス向上のための2点。

DBの実行計画を再利用するためにパラメータマーカーを使う。結果的にDBパフォーマンスが向上する。

図 DBの実行計画を再利用するためにパラメータマーカーを使う

セキュリティ的な理由は後期に話します。


練習課題

画面は下図のイメージです。

図 練習課題のイメージ

Group.cs、Item.cs

おなじです。


ItemDAO.cs

ポイントは主キーで検索するため、戻り値がListでないところです。


Index.cshtml


Index.cshtml.cs


DataReaderのRead()メソッド

検索結果にアクセスするためのDataReaderは、Read()で1行ずつ移動して検索結果にアクセスします。

図 DataReaderのRead()メソッド

  • 検索直後は検索結果0行目がアクセス可能。1行目にアクセスするにはRead()を実行する必要があります。
  • 次行に移動できればTrue、できなければFalseを返す。


次回は

評価用課題を出します。

コメント

このブログの人気の投稿

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

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

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