投稿

11月, 2021の投稿を表示しています

11月26日(金)1、2コマ目

イメージ
今日、やったこと ODP.NETで更新系SQL実行 Listクラスを使う 今日のホワイトボード 更新系SQLを実行する ポイントはSQL実行メソッド ExecuteNonQuery() を使うです。 それだけです。あとはいままで同じです。 サンプルコード 新規追加(INSERT INTOを実行)です。 練習問題 プロジェクト名:DB_12 更新(UPDATE)です。 プロジェクト名:DB_13 削除(DELETE FROM)です。 プロジェクト名:DB_14 更新と新規追加。 Listクラスを使う Listクラスは配列と同じような複数の要素をひとまとめにできます。 配列と違い、初めに要素数を指定する必要はありません(可変長)。 今後は、検索結果をひとまとめにする際などに利用します。 [Listクラスの使い方] ①Listクラスの変数宣言、インスタンス生成   List<要素の型> 変数名 = new List<要素の型>();  ※<>はダイヤモンド演算子  ※このListクラスのインスタンスはダイヤモンド演算子で指定した型の要素だけを扱う  ②要素を追加する   Add()メソッド を使う。  Add()メソッドは最後尾に追加。 図 Listクラスの使い方 ③Listクラスの要素にアクセス  先頭から順番にアクセスするにはfor()より、foreach()のほうが便利。  以下のように書く。   foreach(var 変数名 in Listクラス型の変数名)  {  }  [例]  // Listクラス型変数宣言、インスタンス生成  // このListクラスのインスタンスの要素はGroupクラスのインスタンスのみ  List<Group> grouplist = new List<Group>();  // grouplistにGroupクラスのイン...

11月25日(木)1コマ目

イメージ
今日、やったこと 検索結果が単一値の場合 今日のホワイトボード 検索結果が単一値の場合 ExecuteReader()の戻り値であるOracleDataReaderは検索直後は検索結果の1行目ではなく、0行目にアクセス可能。 よって、検索結果の1行目にアクセスするには、まずRead()メソッドを実行する必要あり。 検索結果が単一値(1行1列)の場合でも、必ず1回はRead()メソッドを実行する必要がある。 図 検索結果が単一値ならExecuteReader()ではめんどくさい  [結論]検索結果を取得するためにDataReaderを使うのはめんどくさい。 ExecuteReader()を使わない 検索結果が単一値なら、SQL実行、戻り値で検索結果を取得したい。 それを実現するのがExecuteScalar()メソッド。 ExecuteScalar()メソッド ExecuteScalar()は検索結果の1行目1列目の値を返す。 別に実行SQLの検索結果が単一値のときしか使えないわけではない。 もし、検索結果がなければ、戻り値はnullになる。 図 ExecuteScalar()メソッド ExecuteScalar()サンプル1 CS_商品マスタから価格の最高値を検索する。 ExecuteScalar()サンプル2 指定されたグループの商品数を検索する。 練習問題 プロジェクト名:DB_11 図 プロジェクト名:DB_11 指定されたグループの最安値商品の商品名を出力する。 ただし、価格は重複しないことを前提にする。(各商品の価格はすべて異なる) 次回は DBアクセスプログラムのテストをします。

11月19日(金)1、2コマ目

今日、やったこと ODP.NET+C#の練習問題 今日の練習問題 テーブル追加 以下のテーブルを追加しました。 テーブル名:CS_売上データ 列名 データ型 制約 売上ID number(2) 主キー制約 制約名:pk_CS売上 商品ID number(2) 主キー制約 制約名:pk_CS売上 数量 number(2) not null テーブル追加後、共有フォルダ内の「サンプルデータ2.txt」のSQLを実行。 プロジェクト名:DB_6 売上一覧データを表示 表示内容は以下のとおり。  売上ID 商品名 グループ名 価格 数量 小計 ※小計は価格x数量 プロジェクト名:DB_7 商品別売上情報 表示内容は以下のとおり。    商品名 売上数量総和 プロジェクト名:DB_8 グループ別売上情報 売上総数がxxx個以上のグループのみ。 表示内容は以下のとおり。  グループ名 売上数量総和 プロジェクト名:DB_9 売上別売上情報 売上総額がxxx円以上の売上のみ。 表示内容は以下のとおり。  売上ID 売上総額 プロジェクト名:DB_10 商品別売上情報 xxxグループの商品で、売上総額がxxx以上の商品 表示内容は以下のとおり。  商品名 売上総数 売上総額 ※検索対象のグループはグループ名で指定すること

11月18日(木)1コマ目

イメージ
前回の確認テスト解答例  C#確認テスト2解答例 今日、やったこと 前回の確認テスト(確認テスト2)の解説 今日のホワイトボード 確認テストの解説+C#の基本をネチネチとやりました。 クラスとインスタンス クラスを作るだけではメモリ上にはなにも起きない(厳密にいえばちょっと違うが)。 インスタンス生成をして初めてメモリ上にクラスに必要なサイズのエリアが確保される。 図 クラスとインスタンス プロパティ クラスにはデータを保存するためのフィールドがある。 フィールドは一般的に他クラスから直接アクセスできないようにアクセス修飾子をprivateにする。このままでは他クラスからフィールドにアクセスできなくなるため、C#ではプロパティを用意する。 図 プロパティ コンストラクタ 一見、メソッドのように見えるが、 呼び出し不可 戻り値なし がメソッドと異なる。 コンストラクタはインスタンス生成時に実行される。 図 コンストラクタ コンストラクタは引数の型や数の違いで1つのクラス内に複数個用意できる 。 インスタンス生成時に( )内の引数でどのコンストラクタが実行されるかが決まる。 メソッド C的に言えば、関数。 図 メソッド 呼び出す際、  変数名.メソッド名() で実行。 変数に紐づくインスタンスのメソッドが実行される 。 図 変数に紐づいたインスタンスのメソッドが実行される 計算 意外と忘れがちな基本ルール。 整数...

11月12日(金)3、4コマ目

イメージ
今日、やったこと 複数のパラメーターマーカーがある場合 今日のホワイトボード [今日のポイント] SQL中に複数のパラメーターマーカーがある場合 パラメーターマーカーの数だけ、OracleParameterのインスタンスが必要。 生成したOracleParameterのインスタンスは、SQLのパラメーターマーカーの順にOracleCommandのParametersプロパティにAdd()する。 図 パラメーターマーカーが複数ある場合 サンプルソース SQLは プログラム中のSQLは長くなるため、途中で改行している。 文字列同士を+演算子(文字列結合)を使って、結合しているが、結合後どんな文字列になるかを考えてください。 図 文字列結合でSQLを作っているので 複数のパラメーターマーカーを使う練習(プロジェクト名:DB_4) 図 練習問題 ソースコード 複数のパラメーターマーカーを使う練習(プロジェクト名:DB_5) 図 練習問題 ヒント グループ毎の商品数と平均価格が条件。 この条件はグループ名でグループ化した各グループに対する条件。 よって、HAVING句で指定する。 ソースコード

11月11日(木)1コマ目

イメージ
前回のテスト(C#確認テスト1)の解答例 C#確認テスト1の解答例 です。 ホワイトボードに書いた内容もあげておきます。 問1 プロパティ作成 問1 プロパティ作成 問2、3 コンストラクタ作成 図 問2、問3 コンストラクタ作成 問4、5 メソッド作成 図 問4,問5 メソッド作成 今日、やったこと パラメータマーカーを使う理由 デバッグ機能の使い方 パラメーターマーカーを使う理由 セキュリティ対策でパラメーターマーカーの利用が推奨されています。 ユーザー入力内容をそのままSQL文字列に結合すると、図のように意図しないSQLが実行できてしまう。 図 文字列結合でSQLを作ると危険!! デバッグ機能の使い方 VisualStudioにはデバッグ機能があります。 実行中のプログラムを一時的に停止させ、変数の中身を確認したり、1ステップずつ実行させて処理の流れを追いかけたりできます。 ①処理を一時的に停止させたい 停止させたい行にブレークポイントを設定します。 行番号左側の灰色部分をクリックするとブレークポイントが設定されます。 図 ブレークポイント設定 ● が ついている34行目にブレークポイントが設定されています。 プログラムを実行すると、ブレークポイント行実行直前で実行が止まります 。 ②実行すると ブレークポイント設定行を実行する前に停止します。 停止している行は => が表示されています。 図 ブレークポイント設定行で停止中 ③変数を確認したい 停止中は変数にマウスをかぶせると代入値が表示されます。 図 変数代入値確認 ④次の処理を実行したい 停止行の次の処理を実行したい場合、ステップイン、ステップオーバー、続行の3つがあります。 図 処理続行(ステップイン、ステップオーバー) 続行方法 ショートカットキー 続行内容 ステップイン F11キー メソッド呼び出しの場合、メソッドの中へ ステップオーバー F10キー メソッド呼び出しの場合、メソッド実行し、次行へ ...

11月5日(金)1、2コマ目

イメージ
今日、やったこと パラメーターマーカーを使う 今日のソースコード+ホワイトボード 商品マスタを全件検索する 前回のおさらいがてら作ってもらいました。ついでに小技を紹介しました。 SQLが長くなると可読性が落ちるので、途中で改行したい +演算子を使ってSQL(文字列)を結合すればOK。 ただし、結合後のSQLをDBがちゃんと解析できるように、区切りには空白をいれること。 図 SQLを改行して書く 検索結果を文字列に変更するには 検索結果を取り出す際に使うOracleDataReaderは  reader[列名] で指定列の値を取り出すことができる。ただし、検索結果は文字列だけではなく、数値型や日付型の場合もある。readerはいろいろな型に対応できる型を返す。 そのため、型変換が必要。 取り出した結果を文字列(string型)に変換するには、ToString()メソッドを利用する。 図 取り出した検索結果を文字列へ変換 グループIDで検索する(パラメーターマーカーを使う) グループID=1で検索するには  WHERE ・・ グループID= 1 グループID=2で検索するには  WHERE ・・ グループID= 2 と検索のたびに検索条件が変わる。 図 検索条件は毎回変わる 毎回変わるSQL(検索条件の部分)をプログラム的に作る方法は 文字列結合でSQLを作る パラメーターマーカーで置き換え、実行時に値をセットする の2種類。しかしながら、パラメーターマーカーを使うのが一般的。 図 検索ごとに変わるSQLをプログラム的に作るには ソースコードは以下のとおり。 xxx円以上の商品を探す ソースコードをあげておきます。

11月4日(木)1コマ目

今日、やったこと C#+オラクルDB(全件検索) 今日のソースコード サンプルデータベースのCS_商品マスタテーブルからID列、商品名列、価格列を表示する。   次回は 今日実施予定だったテストを実施します。