質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

1767閲覧

VB.net における例外処理のかけ方について

hainan

総合スコア31

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2018/08/11 05:28

編集2018/08/11 05:36

確認したいこと

勉強用に作成しているツールの例外処理を利用者側に負担がないように
変更をしたいと思っています。
色々なサイトで勉強をしていたところ、気になる記述があり
どのような処理が正解かを確認したく、投稿させていただきました。

### 問題点
■問題となっている処理内容の数:3つ(A・B・C)

■例外処理のかけ方
①Aに対し例外処理
②Aの処理が終わった後、Aの例外処理を終了
③Bに対し例外処理
④Bの処理が終わった後、Bの例外処理を終了
⑤Cに対し例外処理
⑥Cの処理が終わった後、Cの例外処理を終了

■現在の例外処理のかけ方(A・B・Cすべてバラバラに同じ処理を実施)

VB.net

1※諸々の宣言はかなり省略しています。 2※必要があるとのことであれば教えていただければと思います 3 4Dim Con As New SqlConnection 5 6Using con(SQLサーバー接続文) 7 Try 8  ※SQL接続処理(A・B・Cそれぞれの処理) 9 Catch 10 ※エラー処理(利用者に対して見せなくてもいいエラー文記載) 11 End Try 12end using 13

※上の記載方法はネットの情報を元に流用しましたが
どのサイトだったか探しきれておりません。

##実現したいこと
実際に行いたい処理のかけ方は下記になります。
現在その方法を調べており、その過程で例外処理のかけ方について悩み
相談させていただきました。

①A・B・Cに対し例外処理
②A・B・Cを実行
③①の例外処理を終了

参考にした資料

.NETの例外処理 Part.1

.NETの例外処理 Part.2

###確認したいこと
参考させていただいた資料はかなり古いものですが、「Try~catch」について
利用者が本当に例外(システムでの想定外)でないもの以外は
書かないように、と記載されており、参考にした資料通りに実装するのがいいのか
それとも現在の型を流用して例外処理を行うべきなのか悩んでいます。

初心者で申し訳ありませんが、どなたかご教授いただけませんでしょうか。

補足情報(FW/ツールのバージョンなど)

環境:Windows10 64bit
Visual Studio:Ver2017

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

参考させていただいた資料はかなり古いものですが、

その資料に書いてあることを要約すると以下の通りになると思います。記事は古くても下記 (1) ~ (6) の内容は今でも有効で、そのガイドラインに沿って考えるべきと思います。

(1) 予測可能で正しい業務フローに戻すことができる「業務エラー」(例:ユーザーの入力間違い)と、予測できないもしくは予測はできても何の対応もできない「例外」(例:DB サーバーダウン)を区別して対処。

(2) 「例外」はランタイムに拾わせてアプリケーションを停止させる。

(3) よほどのことがない限り try-catch は書かない。

(4) キャッチせざるを得ない場合でも Execption はキャッチしない。

(5) 間違って補足してしまった例外は throw する。(注:catch ブロックでキャッチした例外を throw するとスタックトレースが途切れるので単に throw と書く)

(6) ユーザーへの通知が必要なら、集約的例外処置を利用する。

「Try~catch」について利用者が本当に例外(システムでの想定外)でないもの以外は書かないように、と記載されており、

それは上記 (1), (2) の話ですよね。その通りだと思います。

予測不能・対応不能な例外をキャッチして何ができるのでしょう? 正しい業務フローに戻すことができるのでしょうか?

できないとしたら、例外を catch して握りつぶしてユーザーが続行できるようにしてしまったら、ファイルを壊してしまったとかの不測の事態が起きるかも。上記 (2) で言うようにアプリケーションを終了させるべきでしょう。

.NET 4 からは破損状態例外は catch できなくなっているそうですが、「それでも Catch (Exception e) を使用するのはよくない」ということについては以下の記事を見てください。

破損状態例外を処理する
https://msdn.microsoft.com/ja-jp/magazine/dd419661.aspx

参考にした資料通りに実装するのがいいのか

その通りと思います。

それとも現在の型を流用して例外処理を行うべきなのか悩んでいます。

質問者さんの言う「現在の型」というのが理解できていませんので、すみませんがその点はコメントできないです。

投稿2018/08/11 06:20

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hainan

2018/08/11 06:52

回答ありがとうございました! また、ふわっとした内容で記載してしまい、申し訳ないです。。。 いただいたURLと(ありがとうございます!)、もう一度参考にしたサイトを元に 例外処理について学ぼうと思います。 重ね重ねありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問