2021年3月19日金曜日

VS2019備忘録

 VS2019備忘録

アプリケーション構成ファイル(Web.config)

  • Webアプリケーションで利用する設定情報をXMLで保存したもの(環境変更に強くなる)
  • プロジェクト新規作成時に自動的に生成される
  • DBへの接続情報は<connectionStrings>タグに記述される
  • DBサーバーを変更したい場合はこちらを書き換えるだけで良い

ポストバック(ASP)

  • ASPでは、ボタンコントロールはASPタグで配置されている
  • 通常のHTMLボタンではなく、サーバーコントロール
  • 実行時にはsubmitのinputタグに変換される
  • 通常のHTMLではボタンを押すたびにフォームの内容がリセットされてしまう
  • ASPでは「ビューステート」と呼ばれるhiddenのinputタグとして値を保存しているため、ボタンを押しても内容が復元される(各コントロールの状態も復元される)
  • 通常は、ポスト→処理後のページに遷移 ASPは、データ送信・処理を行い自身のページに戻る

日付のカスタム書式

書式指定子説明出力例
yyyy4けたの年2004
yy0埋め2けたの年04
MM0埋め2けたの月08
dd0埋め2けたの日24
ddd曜日の省略名(カルチャに依存)
dddd曜日の完全名(カルチャに依存)火曜日
HH0埋め2けたの時間(24時間表記)20
hh0埋め2けたの時間(12時間表記)08
mm0埋め2けたの分23
ss0埋め2けたの秒06
引用:https://www.atmarkit.co.jp/ait/articles/0408/27/news104.html

  • フィールドバインドで形式を指定する時は、{0:yyyy/MM/dd}のように指定
  • 文字列への変数埋め込みをするため0:みたいな書き方になる(https://blog.hiros-dot.net/?p=6407)
  • 詳しくは(https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/custom-date-and-time-format-strings)

ディティールビューとフォームビュー

  • ディティールビューは簡単にきれいなレイアウトのカード型を作成できるが、テンプレートの編集機能を利用して自由なレイアウトを組むことはできない
  • ディティールビューは項目数の少ないデータを簡単に表示したい場合に使う
  • 詳細に設計する場合はフォームビューを使う
  • ディティールビューについてはこちら(https://www.atmarkit.co.jp/fdotnet/dotnettips/840aspdetailsview1/aspdetailsview1.html)

HyperLinkフィールド

  • DataNavigateUrlFields:遷移先のフォームでデータを表示するための値を示す列名(例:customerID)
  • DataNavigateUrlFormatString:遷移先のWEBフォームのアドレス(同一フォルダの場合はプログラム名のみでOK)(例:CustomerCard.aspx?id={0} ?以降はクエリ文字列となる id=customerIDとしても良いが、id={0}とするとDataNavigateUrlFieldsで入力した値となる)
  • DataTextField:グリッドビューの一覧に表示する列名(例:customer_name)
  • SortExpression:並べ替えに使用する列名(例:customer_name)
  • HeaderText:グリッドビューの一覧における項目名(例:顧客名)
  • 呼び出される側の処理
    • DBの抽出条件でQueryStringを設定する(URLでid=で呼ばれる場合はidとする)→呼び出し側のクエリ文字列のパラメータと同じにする

CommandNameプロパティ

  • ボタンやリンクボタン等をクリックしたときに実行するコマンドを指定する
  • Editとすると編集用テンプレートを表示する
  • Newと指定すると新規追加用テンプレートを表示できる
  • Edit→編集モード
  • New→挿入モード
  • Insert→入力された内容でデータを挿入する
  • Update→入力された内容でデータを更新する
  • Delete→データを削除する
  • Cancel→ユーザーの操作を取り消して表示モードに戻る

フィールドのバインドが選択できない場合

  • 表示形式を{0:yyyy/MM/dd}にしたいのにフィールドのバインドが選択できない場合は、カスタムバインドのコード式ボックスに直接入力を行う(今回の例だとBind("first_action_date","{0:yyyy/MM/dd}"))

EvalとBindの違い

  • Bindメソッドは、データベースとの双方向(読み取り・書き込み)のバインディング(結合)を可能とするもの
  • Evalメソッドは、読み取り専用のため更新はできない

AppendDataBoundItemsプロパティ

  • ドロップダウンリストで使用する
  • 参考(https://blog.jhashimoto.net/entry/20110225/1298589836)
  • 使用時の問題点(http://natchan-develop.seesaa.net/article/49164594.html)

CommandNameプロパティ

  • Updateと指定 → フォーム上のBindメソッドが指定されたコントロールのデータを更新する
  • Cancel → キャンセルして編集を終える
  • Insert → コントロールに登録された値を利用して新規追加する(データソースに指定したInsertステートメントを利用)
ページロード時にクエリ文字列idが指定されているかどうかを判定して、指定がない場合は新規追加用テンプレートを表示する

Updateボタン、リンククリック後の処理の流れ

  • 「ItemUpdatingイベント」→「データベースの更新」→「ItemUpdatedイベント」

SQL文備忘録

 SQLステートメントの備忘録

角括弧[]の使い方

  • 列名などに特殊な名称(ハイフンなどの記号、数字から始まる)の場合はエラーになるので、それを防ぐために列名が括弧で囲われる(VS2019ではDBから読み込むSQL文は自動でつくようになっている)
ワイルドカード指定
  • 「%」がワイルドカード指定になる(ほかにも「_」があるが、「%」は0個以上の文字、「_」は1個の文字を表す)
  • 文字列+'%'とすれば文字列前方一致、'%'+文字列とすれば後方一致、'%'+文字列+'%'なら部分一致となる
  • VS2019のWHERE句の追加でパラメータのプロパティの部分の規定値は「%」にしておけば最初すべてが表示されるようになる
  • ワイルドカード文字はDBによって異なる → ACCESSの場合は「%」→「*」、「_」→「?」に置き換える必要がある

HTML5 & CSS3備忘録

HTML5とCSS3についての備忘録

HTML5

HTML5の思想

  • HTML5では見栄えに関する設定はすべてCSSに任せることになった→ HTML5準拠のためにはCSSは必須
    • 例:tableのcellpaddingやcellspacingはHTML5では非推奨
    • cellspacing1はtable-collaspeで代用できる

CSS3

複数classを適用する

  • class指定時にスペースで繋ぐ

IMEモードについて

  • IMEモードは現状MS系のブラウザ以外では使用できない
  • 業務では非常に便利なので、MS系ブラウザでの使用前提なら使ってもよい

2021年3月10日水曜日

SQLのN+1問題備忘録

N+1問題とは

ループ処理の中でSQLを発行 → 大量増殖(ねずみ講式)


回避方法

  • JOINする → 予めJOINしてテーブルをくっつけておく
  • Eager Loadする → 予めSELECTで引っ張っておく
大量の別テーブルをループで回していくから増殖する

EagerLoadとLazyLoadの違い

EagerLoad



先にがばっとセレクトしておく方法

LazyLoad

都度都度SQLを発行する(ねずみ講式)

当たり前だが、EagerLoadの方がパフォーマンスが速い(SQLの発行数が少ない)

対策時の注意点

  • メモリオーバーする可能性がある(スワップの発生)
  • 必要に応じて件数を区切りながら処理する必要がある

出典