- - PR -
Try の中
1|2|3|4|5
次のページへ»
投稿者 | 投稿内容 | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-02-29 13:44
こんにちは。
先程はありがとうございました。 もう1点お聞きしたいことがありますので 宜しくお願いします。 VB2005の環境です。 下記のようなコーディングをしました。 今まではOn Errorでコーディングしていましたが Try Catchに変えようと思いまして・・・ 何をお聞きしたいのかといいますと Try から Catch ex の間に いろいろな処理を入れてても問題ないのか おききしたいのです。 データを取得したり、IF文があったり、ForのLOOPがあったり 皆さんは、多くの処理があるときは、どうされていますか? ************************************************************************* Private Sub AASet() Dim MyTbl As New DataTable Dim CNT As Int16 Dim strSQL As String Try mintMPAGE = intPAGE For CNT = 1 To 12 Me.Controls("lblOption" & CNT.ToString).Text = "" Next strSQL = " SELECT * FROM TBL" '******************************************************* MyTbl = GetData.GetDs().Tables(0) If MyTbl.Rows.Count = 0 Then Else For Each ROW As DataRow In MyTbl.Rows If ROW("MNO") = 0 Then Me.Text = ROW("MTITLE") Else If ROW("MNO") = 99 Then CNT = 12 Else CNT = ROW("MNO") End If mMNO(CNT) = ROW("MNO") mPGMID(CNT) = ROW("PGMID") mMTYPE(CNT) = ROW("MTYPE") If CNT < 10 Then セット処理 END If End If Next End If Catch ex As Exception MessageBox.Show(ex.Message) Me.Close() End Try End Sub すいません、宜しくお願いします。 | ||||||||||||||||||||||||
|
投稿日時: 2008-02-29 13:49
回答ではないけれど、ソース貼るときは
[code] [/code](実際は全て半角文字) で囲んで頂けると大変助かります。 | ||||||||||||||||||||||||
|
投稿日時: 2008-02-29 13:55
「ロジックでは回避できない例外が発生すると想定される処理」 だけ加えるようにしています。
これが案外少ないので、
こうなることが多いですね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||||||
|
投稿日時: 2008-02-29 14:32
未処理の例外を以下でキャッチする事もできます。
Application.ThreadException += new ThreadExceptionEventHandler(XXXXX); AppDomain currentDomain = AppDomain.CurrentDomain; currentDomain.UnhandledException += new UnhandledExceptionEventHandler(YYYYY); (Windowsでしたよね。ASP.NETの場合は別です。あとリソース開放等が微妙ですが) | ||||||||||||||||||||||||
|
投稿日時: 2008-02-29 14:34
回答ありがとうございます。
例えば アプリケーション実行パス取得 APPでINIファイル参照 DataSet取得 とあった場合 Try '*** パス取得 '*** INIファイル '*** DataSet取得 Catch ex As Exception MessageBox.Show(ex.Message) Me.Close() End Try ではなく '*** パス取得 Try '*** INIファイル '*** DataSet取得 Catch ex As Exception MessageBox.Show(ex.Message) Me.Close() End Try でしょうか? パス取得は Application.StartupPathで 例外が発生する可能性が低い為です。 この場合On Errorはコーディングしないのでしょうか? | ||||||||||||||||||||||||
|
投稿日時: 2008-02-29 17:42
仕様しだいなので答えられないです。 例外を握りつぶして良いものかどうかなど考慮する必要があります。 処理続行可能かどうか、処理を続行させなければならないのか。(入力したデータが消えるのは勘弁してくれというユーザーもいます)
On Error ではコーディングしないと思います。 処理続行不可能な例外ならいちいち Catch しないですね。 続行できないのですから。 その時は Application.ThreadException や AppDomain.UnhandledException を使って通知して終了すると思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||||||
|
投稿日時: 2008-02-29 18:03
後処理を考えたときに、Tryに複数のステップを書いた場合、
どのステップで例外になったのか、どこまで処理が進んだのか、何を廃棄し何を復旧しなければいけないのか というような制御が出てきます。 どのステップでというのは事実上無理です。
のようなことをしなければいけなくなります。 なので、後処理ごとにTryで囲むということはあります。 Catchを特定のException派生型でいくつか並べてその種類ごとに後処理を書くというのもありますが それも1ステップだからこそ判断できるわけで、 複数ステップの場合は例外の種類と特定のステップを暗黙で結びつけることになってしまいます。 | ||||||||||||||||||||||||
|
投稿日時: 2008-03-01 07:39
同じく回答ではないけれど、この内容であれば投稿時に「この投稿で BB コードを使わない」にチェックすれば、[ code] と書けたのではないかと思います。
だから、コードタグでくくってよ。大ベテランなんだからさぁ?
Try を入力すると、Catch が自動で入力されますが、これはフィードバックして削ってもらおうと思うくらい、間違った挙動です。むやみやたらとキャッチするのは、ハンドで反則です(by NAL-6295さん)。try に対しては、finally が入るべきです。 例外処理については、例外処理の実施<microsoft.com>を、まずは読んでください。catch ブロックを、例外を握りつぶすために使ってはいけません。 一例:
|
1|2|3|4|5
次のページへ»