- PR -

オブジェクト参照エラーについて

投稿者投稿内容
taro
ベテラン
会議室デビュー日: 2003/08/06
投稿数: 55
投稿日時: 2003-08-27 09:01
Jitta さま

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

Exceptionのエラーメッセージのことは知っていましたが、エラー内容が
「呼び出しのターゲットが例外をスローしました。」というもので、
これが何に起因して発生しているのかが調べてもわかりませんでした。


質問をしておきながら、エラーの正確な情報を提供せずに申し訳ありません。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-08-27 09:23
引用:

taroさんの書き込み (2003-08-27 09:01) より:

Exceptionのエラーメッセージのことは知っていましたが、エラー内容が
「呼び出しのターゲットが例外をスローしました。」というもので、
これが何に起因して発生しているのかが調べてもわかりませんでした。


 Exception.InnerExceptionは、ご存じですか?今見ている例外の発生元となった例外の情報です。再帰的に潜ってすべてのMessageを見ると、原因が書いてあるかもしれません。
 また、Exceptionで受けていても、生成されたオブジェクトの型は変わらないので、Exception.GetType().ToString()で、なんという例外が発生したのかがわかります。その型にキャストすると、より有用な情報が表示できる可能性があります。例えば、OleDbExceptionが発生しているのであれば、Errorsプロパティにより、OLEで発生したエラーの詳細を参照できます。
←キャストするのではなく、元からその型で受けるようにしてください。
try
catch ex as oledbexception
catch ex as argumentexception
catch ex ...
end try

 例外は、多くの場合「エラー処理」といわれますが、「例外的な状況が発生した場合の、状況情報を収集する手段」でもあるので、有効に活用してください。←逆に言えば、自分が例外を生成するときはそれだけの情報を詰め込むように気を配れ、ということ。
taro
ベテラン
会議室デビュー日: 2003/08/06
投稿数: 55
投稿日時: 2003-08-29 10:34
Jitta さま

ご指摘ありがとうございます。

ご指摘のようにException.InnerExceptionのMessageを見てみると
「Oracle エラーが発生しましたが、エラー メッセージは Oracle から取得できませんでした。」とありました。

 olacleエラーメッセージを取得しようとして、以下のようなコードを書いたのですが、肝心なoledbExceptionのほうには入りませんでした。

 どこかコーディングの仕方に間違いがあったのでしょうか?

 strDBName = "DataBase"
strUser = "User1"
strPassword = "Password"

Try
strConnect = "Provider=MSDAORA; Data Source=" + strDBName + "; User ID=" + strUser + "; Password=" + strPassword

objConnect = New OleDb.OleDbConnection(strConnect)
objConnect.Open()
Catch ex As OleDb.OleDbException
  'error処理

Catch ex As Exception
'error処理
End Try

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-08-29 11:32
引用:

taroさんの書き込み (2003-08-29 10:34) より:

ご指摘のようにException.InnerExceptionのMessageを見てみると
「Oracle エラーが発生しましたが、エラー メッセージは Oracle から取得できませんでした。」とありました。

 olacleエラーメッセージを取得しようとして、以下のようなコードを書いたのですが、肝心なoledbExceptionのほうには入りませんでした。


 エラーになる場合と、ならない場合で、接続文字列が変わったりしていませんか?
 使い終わった接続を、ちゃんと閉じていますか?接続数が上限に達しているとかの問題ではないでしょうか?

 例外の型は、とりあえずcatch ex as exceptionの中に、
debug.writeline(e.message, e.gettype.tostring)
を入れてください。すると、「出力」ウインドウにメッセージと型が表示されます。それを頼りにcatchを増やしてください。なお、innerexceptionの例外を拾うことはできません。それは内部でキャッチされ、他のexceptionに変換(という言い方が正しいとは思わないが)されて送出されているからです。
taro
ベテラン
会議室デビュー日: 2003/08/06
投稿数: 55
投稿日時: 2003-09-02 09:55
Jittaさま

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

ご指摘のとおりにDebug.WriteLineをいれいろいろとやっている最中です。

また、なにか壁にぶつかりましたら質問させていただきます。

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