10月3日(火)1、2コマ目
今日、やったこと
.Netでの例外
今日のホワイトボード
処理終了時の状態
メソッド終了時は
- 正常終了
- 異常終了
の2つに分かれる。この異常終了はさらに
- 想定内のエラー
- 想定外のエラー
に分かれる。
想定外のエラーももっとよく考えれば想定内のエラーになるため、線引きができない。
そこで、
想定内のエラー => 利用者に通知してリカバリしてほしい(できる)エラー
想定外のエラー => 利用者に通知してもなにもできないエラー
と再定義する。
|
| 図 想定内のエラー、想定外のエラー |
エラーを伝えるには
メソッド呼び出し元になにかを伝える手段は
- 戻り値
- 例外スロー
の2種類がある。これをメソッドの結果に応じて使分ける。
〇想定内のエラー(利用者に通知してリカバリしてほしいエラー)
戻り値で通知
〇想定外のエラー(利用者に通知してもしょうがないエラー)
例外スローで通知
※この指針はこの授業内でのルールとします。世間一般的な絶対的なルールではありません。
|
| 図 呼び出し元に通知する手段 |
例外がスローされたときは
やってはいけないこと => 例外をキャッチしてなにもしない
これは絶対守ること。
|
| 図 例外がスローされたとき |
OracleException
ODP.NETでオラクルDBにアクセスする際、エラーが起きるとOracleExceptionがスローされる。その例外のNumberプロパティにはOracleのエラーコードがセットされている。
|
| 図 OracleException |
サンプルアプリケーション
ユーザー登録を行うアプリケーションを作成。
入力内容をDBに登録するが、このとき以下のエラーが想定される。
- 入力されたIDはすでに利用中
- 入力された紹介者のIDは存在しない
いずれも利用者に通知して、リカバリをしてほしい(できる)エラー。
UserDAO.cs
ポイントはInsert()メソッド。
戻り値が列挙型のUserInsertResultEnum型になっている。結果が以下の
- 成功
- IDが重複
- 紹介者IDがない
の3つになるため、列挙型で各結果を伝える。
UserInsertResultEnum.cs
ユーザー登録結果を伝えるための列挙型。
Index.cshtml.cs
UserDAOのInsert()の戻り値(UserInsertResultEnum)によって、表示するメッセージを切替。
また、未入力項目のチェックに引っかかったら、一旦エラーメッセージ付き例外をスローして即キャッチ、エラーメッセージを表示。
Index.cshtml
次回は
練習問題をやります。



