• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:[Err.Getexception] について)

[Err.Getexception]について

このQ&Aのポイント
  • この質問では、ソースコードの例外処理部分にある「If TypeOf Err.Getexception Is Oracle.DataAccess.Client.OracleException Then」という記述についての理解を求めています。
  • また、エラーを表わす例外とは何か、具体的には「Err.Getexception」とはどのような要素なのかについても知りたいとしています。
  • さらに、「Oracle.DataAccess.Client.OracleException」という言葉の意味や役割についても説明を求めています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

#1 Wizard_Zeroです。 Exception(例外)とは、プログラムの実行を中断した例外情報を格納するオブジェクトです。プログラムの実行を中断する原因はさまざまであり、その原因に合わせて、IOExceptionやNullReferenceExceptionといったオブジェクトが格納されます。 補足で挙げられた「0での除算」の場合は、OverflowExceptionオブジェクトが格納されます。 一般的に「~Exception」という名前のオブジェクトは、Exceptionオブジェクトを継承したものなので、Exception型の変数に代入することができます。Err.GetExceptionの戻り値がSystem.Exceptionであるのはこのためです。 しかし、このままではプログラムの実行が中断されたことは分かりますが、その原因が何なのかまでは分からないため、TypeOf~Isステートメントを使って、例外を発生させた原因を明確にしているのです。 [ エラーの原因が明確にならない例 ] If Err.GetException IsNot Nothing Then '何らかのエラーが発生した。 End If [ エラーの原因が明確になる例 ] If TypeOf Err.GetException Is IO.IOException Then ' I/Oエラーが発生 ElseIf TypeOf Err.GetException Is OverflowException Then ' 0で除算 ElseIf Err.GetException IsNot Nothing Then ' 特定不可能 End If 余談ですが、Errオブジェクトを使った例外処理は、VB6.0時代のコードと互換性を保たせるために残されている(と思う)ので、.NETでコーディングするのであれば、Try~Catchを使って下記のように記述します。 ※Err.GetExceptionに関する記事が少ないのは、このあたりが原因かと。。。 Try '処理 Catch ex As IO.IOException ' I/Oエラー Catch ex As OverflowException ' 0で除算 Catch ex As Exception ' 特定不可能 End Try

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

>こういうのはGoogleででも「Oracle.DataAccess.Client.OracleException」 「VB.NET Catch Try」 でWEB照会すれば様々な記事が何万と出てきます。その中をのぞくのが良い。 Catch Try http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard12.htmほか多数。 ーー 「Oracle.DataAccess.Client.OracleException」 オラクルはオラクル社のデータベースを管理するソフトで、最も使われているデーベースソフトの1つです。だからMS社といえどもVB.Netでも、VB.NETでそれを使っているユーザー(世界的に数が多い)の事を考慮せざるを得ないのだと思います。 それで製品名らしいものが出てくるのだと思います。 http://otndnld.oracle.co.jp/beginner/odpnet/1_1/index.html の図参照。 Exceptionとは俗にはエラーが起こった、という場合の処理を書くところで、システム側で、予期せぬこと(例外)が起こった場合にプログラム実行権をここに移してもらい、ユーザーが処理コードを書く(適当な処理をさせる) Jave言語で先行し、VB.NETに現れた。

bebestplay
質問者

お礼

ご丁寧に歴史まで説明いただきありがとうございます。 最低限googleで検索することはしたのですが、 説明に使われている用語が難しくて全くイメージが 湧かなかったので投稿させていただきました。 徐々に自力で読解できる力を身につけていかなければいけませんね。

回答No.1

If ☆ Then ★ End If ☆(条件式)がTrue(真)であれば★が実行されます。 今回の場合、☆は「TypeOf Err.Getexception Is Oracle.DataAccess.Client.OracleException」です。 TypeOf ○ Is ● ○(検証するオブジェクト)のデータ型が、●(データ型)であればTrue(真)となり、●以外であればFalse(偽)となります。 Err.GetException エラーを発生させた例外(Exceptionオブジェクト)を取得します。 .NETでは、何らかの理由でプログラムの実行が中断されたことを示す情報を「例外(Exception)」と呼んでいます。一般に.NETでは「Try~Catch」ステートメントを使って例外処理を行いますが、VB6.0以前と互換性を保つために「Errオブジェクト」が用意されています。このErrオブジェクトから.NETの例外情報を取り出すメソッドが「Err.GetException」です。 Oracle.DataAccess.Client.OracleException (名前空間からの推測ですが)Oracleデータベースへクライアントとしてアクセスする場合に、何らかのエラーが発生すると呼び出される例外ではないかと思います。 まとめると、 Err.GetExceptionのデータ型がOracle.DataAccess.Client.OracleExceptionである場合にIf~End Ifの間に記述した処理を行う。 となります。

bebestplay
質問者

お礼

ありがとうございました。

bebestplay
質問者

補足

丁寧にご説明していただきありがとうございます。 ・If~End If ・TypeOf ・Oracle.DataAccess.Client.OracleException についてはよく分かりました。 ご説明をいだたいて追加で疑問が湧いてきたのですが、 Err.GetException は エラーを発生させた例外を取得するとのことですが、 では、例外(Exceptionオブジェクト)とは いったいどんなものなんでしょうか? 例えば「0による除算」はランタイムエラーだと思いますが、 (間違っていたらすいません) これが起きた時、Err.exceptionには何が入っているんでしょうか?

関連するQ&A