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を返す。
次回は
評価用課題を出します。






コメント