投稿

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

今日、やったこと オラクルDBを利用したWebアプリケーション開発確認演習 今日の確認演習 演習5 とくにややこしいところはないと思います。 Startup.cs、Group.cs、Item.cs 前回と同じです。 ItemDAO.cs Index.cshtml Index.cshtml.cs   演習6 xx円以上かつxx円以下の検索がポイント。 パラメータマーカーを2つ利用する。 Startup.cs、Group.cs、Item.cs 前回と同じです。 ItemDAO.cs Index.cshtml Index.cshtml.cs

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()メソッド 検索結果にアクセスするためのDat...

8月16日(月)

イメージ
今日の予習 オラクル用接続文字列 "Data Source= " + "  (DESCRIPTION = " +  "    (ADDRESS_LIST = " +  "      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.4.6)(PORT = 1521)) " + "    ) " + "    (CONNECT_DATA =  " + "        (SERVICE_NAME = infopdb) " + "     ) " + "  );  " + "User Id= ユーザー名 ; password= パスワード ;" です。 ユーザー名 、 パスワード は自分のOracle接続用アカウントを指定してください。 なお、 ユーザー名 はPCログイン時のユーザー名と同じ パスワード はユーザー名と同じ文字列 です。 今日、やったこと C#からオラクルDBを使う(ODP.NET Core) 今日のホワイトボード C#からオラクルDBにアクセスするには 方法はいろいろあるが、オラクルが作ったODP.NET Coreを使うのが一番(と思う)。 図 C#プログラムとODP.NET Core これから階層化して ほっとくと~.cshtmlや~.cshtml.csですべてやってしまう。結果として汚いソフトになってしまう。 そこで、役割分担。授業では下図のように役割を分担します。 図 階層化 今日のソースコード グループマスタを全件検索、表示する [データトランスファー]Group.cs グループマスタ情報の受け渡し担当。プロパティとコンストラクタだけなので、省略。 [データアクセス]GroupDAO.cs オラクルDB上のグループマスタにアクセスするためのクラス。 今日は全件検索をするためのSelectAll()メソッドのみ。 [プレゼンテーション]Index.c...

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

今日、やったこと 確認演習4 確認演習5 今日の確認演習 ソースコードをあげておきます。 確認演習3 Startup.cs いつもどおり。 SessionExtentions.cs いつもどおり。 Coffee.cs コーヒーを扱うためのクラス。 Size.cs サイズを扱うためのクラス。 Topping.cs 1種類のトッピングを扱うためのクラス。 SelectedItem.cs 選択商品1種類を扱うためのクラス。 Index.cshtml Index.cshtml.cs 演習5 Startup.cs いつもどおり。 SessionExtentions.cs いつもどおり。 Coffee.cs コーヒーを扱うためのクラス。 演習4のCoffee.csと同じ。 Size.cs サイズを扱うためのクラス。 演習4のSize.csと同じ。 Topping.cs 1種類のトッピングを扱うためのクラス。 演習4のTopping.csと同じ。 SelectedItem.cs 選択商品1種類を扱うためのクラス。 演習4のSelectedItem.csと同じ。 Index.cshtml Index.cshtml.cs

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

イメージ
今日、やったこと チェックボックス(HTML) 1フォームに複数ボタン 先週の課題のやりのこし 今日の課題とソースコード チェックボックス チェックボックスは複数項目選択可能。 name属性を同じ値にしておけば、OnPost()では配列で選択値(value属性値)を受け取ることができる。 図 起動直後 図 赤、黄、桃選択し追加ボタンをクリック Startup.cs いつもどおり。 SessionExtentions.cs いつもどおり。 Index.cshtml Index.cshtml.cs 1フォームに複数ボタン どのボタンが押されたかを識別できないと困る。 図 各ボタンのvalue属性値で押されたボタンを識別する <button>タグにはname属性とvalue属性がある。ボタンをクリックすると、value属性設定値がサーバーに送信される。name属性を同じ値にして、OnPost()に同名の引数を用意すればどのボタンが押されたかがわかる。 図 起動直後 図 赤、黄、桃選択、追加ボタンクリック 図 黄の削除ボタンクリック Startup.cs いつもどおり。 SessionExtentions.cs いつもどおり。 Index.cshtml Index.cshtml.cs 先週の課題3のやりのこし 「選択済み商品リスト中の商品とおなじ商品(商品名、サイズが同じ)が選択された場合は、数量を加算すること」 以下を変更しました。 SelectedItem.cs 選択商品を扱うためのクラス。 同じ商品か否かを判定するIsSameItem()メソッドを追加 Index.cshtml.cs 選択済み商品リストに選択商品と同じ商品があるかチェックし、もしあれば数量加算、なければリストを追加する。 次回は ぼちぼち評価用の課題をやってもらいます。

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

イメージ
今日、やったこと 拡張Sessionオブジェクト 今日のホワイトボード 今日は先週紹介した拡張Sessionオブジェクトの練習をしました。 演習課題8 こんなサイトを作りました。 図 起動直後 図 商品、色を選択 図 選択ボタンクリック後 図 さらに商品を選択すると ソースコードを載せときます。 Startup.cs SessionExtentions.cs Item.cs SelectedItem.cs Index.cshtml Index.cshtml.cs 確認課題3 こんなサイトを作りました。 図 起動直後 図 商品、サイズ選択、数量入力 図 送信ボタンクリック後 図 さらに商品を選択すると ソースコードを載せておきます。 Startup.cs 演習課題8と同じです。 SessionExtentions.cs 演習課題8と同じです。 Item.cs Size.cs ...

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

イメージ
今日、やったこと 拡張セッションオブジェクト  今日のホワイトボード 前回のおさらい 前回からリクエストをまたいで情報共有できるセッションオブジェクトを使いはじめました。 そのセッションオブジェクトを使ったおさらい演習です。 図 作るモノ Startup.cs Index.cshtml Index.cshtml.cs ISessionを拡張する 現状、セッションオブジェクトには int型 string型 しかセットできないため、自分で作ったクラスのインスタンスは格納できません。 図 現状のセッションオブジェクトの問題点 このままではまったく役立たずなセッションオブジェクトなため、既存のセッションオブジェクト(ISession型)に拡張メソッドを追加します。 図 作るモノのイメージ SessionExtensionクラス ISessionに以下の2つの拡張メソッドを追加します。 T Get<T>(string key) void Set<T>(string key, T value) SelectedItemクラス 選択商品情報を扱うためのクラス。 セッションオブジェクトにこのインスタンスのリストを格納します。 引数なしのデフォルトコンストラクタが必要な点に注意!! Index.cshtml セッションオブジェクトの取り扱いは以前と同じです。 Index.cshtml.cs セッションオブジェクトの取り扱いは以前と同じです。