- PR -

【ASP.NET】クラス内で発生したエラーの捕らえ方

投稿者投稿内容
えんぞ@?
ぬし
会議室デビュー日: 2004/07/06
投稿数: 271
お住まい・勤務地: はまっこ
投稿日時: 2006-03-30 16:18
引用:

じゃんぬねっとさんの書き込み (2006-03-30 15:49) より:
引用:

ひろれいさんの書き込み (2006-03-30 12:00) より:

じゃんぬさん、分かりやすいご説明ありがとうございました。
既に、じゃんぬさんはヒントをくれていましたね
「共有メンバ」と「インスタンスメンバ」というヒントを。


すみません、説明が下手なもので...
どこかに誘導した方が良かったかもしれません。


これ見てなんとなく納得。。。
http://www.atmarkit.co.jp/fdotnet/basics/oop03/oop03_04.html
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-03-30 16:27
引用:

えんぞ@?さんの書き込み (2006-03-30 16:18) より:

これ見てなんとなく納得。。。
http://www.atmarkit.co.jp/fdotnet/basics/oop03/oop03_04.html


私も納得です(^o^)
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2006-03-30 18:04
こんにちは。
なんか途中からスレタイと全然違う話になってますね(^^;

一気に話を戻してしまいますが…
引用:

ひろれいさんの書き込み (2006-03-29 14:21) より:
C系では例外をキャッチするのは当たり前なのでしょうね。
旧VBでは、On Error でしたから、Throw という知識がありませんでしたm(_ _)m
ありがとうございました。


厳密に言うと、C言語に例外機構はありません。
Try〜Catchが使えるのはC++からです。
しかも、Javaや.NETと違ってfinallyがありません。

javaはあんまり詳しくないんですけど、
私が.NETでよく使うのは「Catch無し」のTry〜Finallyです。
例えば、DB接続の場合、こんな感じ。
コード:
Dim conn As Oracle.DataAccess.Client.OracleConnection
Try
    conn = New Oracle.DataAccess.Client.OracleConnection("接続文字列")
    conn.Open()
    '以下略
Finally
    If Not conn Is Nothing Then conn.Close()
End Try

ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-03-30 20:39
ぼのぼのさん、こんばんは。
引用:

ぼのぼのさんの書き込み (2006-03-30 18:04) より:

私が.NETでよく使うのは「Catch無し」のTry〜Finallyです。
例えば、DB接続の場合、こんな感じ。
コード:
Dim conn As Oracle.DataAccess.Client.OracleConnection
Try
    conn = New Oracle.DataAccess.Client.OracleConnection("接続文字列")
    conn.Open()
    '以下略
Finally
    If Not conn Is Nothing Then conn.Close()
End Try




はい。私も本日、参考となるページを教えていただきましたので、それを元に全ソース見直しました。

基本的には、ぼのぼのさんと同様、Try 〜 Finally 〜 にしました。
で、Application_Error イベントでエラー画面を表示するようにしました。

ただ、業務的にエラーをキャッチしたい場合もありましたので、その場合のみ Catch句を入れております。

無駄な Try が無くなり、階層もちょっと浅くなり、スッキリしました(^o^)
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2006-03-30 21:31
引用:

ぼのぼのさんの書き込み (2006-03-30 18:04) より:
厳密に言うと、C言語に例外機構はありません。
Try〜Catchが使えるのはC++からです。
しかも、Javaや.NETと違ってfinallyがありません。


これは正確にはfinallyが無いというよりは必要がないですよね。
そこらへんはJavaやC#, VB.NETよりも羨ましい。
プリコンパイルやC++のテンプレートも欲しい機能ですね。

[ メッセージ編集済み 編集者: Kazuki 編集日時 2006-03-30 21:32 ]
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-03-30 22:21
引用:

これは正確にはfinallyが無いというよりは必要がないですよね。



Windows API や C ランタイム関数なんかを混在して使う場合、finally 句が欲しくなります。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-04-02 21:21
 「再 throw すればいいやん」とか思って、
コード:
try {
    処理
} catch (Exception ex) {
    ログ出力
    throw;
}


とかやったら。。。デバッグ中に IDE がキャッチする例外の「発生元」が、この throw 文になりますから!

デバッグ時も、ピンポイント、ピンタイムでキャッチしましょう。キーパーも、ペナルティエリアの外ではハンドで反則ですから。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-04-03 00:17
引用:

とかやったら。。。デバッグ中に IDE がキャッチする例外の「発生元」が、この throw 文になりますから!



それを追いかけるための InnerException プロパティです。

スキルアップ/キャリアアップ(JOB@IT)