- - PR -
オブジェクト参照エラーについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-08-27 09:01
Jitta さま
ご指摘ありがとうございました。 Exceptionのエラーメッセージのことは知っていましたが、エラー内容が 「呼び出しのターゲットが例外をスローしました。」というもので、 これが何に起因して発生しているのかが調べてもわかりませんでした。 質問をしておきながら、エラーの正確な情報を提供せずに申し訳ありません。 | ||||
|
投稿日時: 2003-08-27 09:23
Exception.InnerExceptionは、ご存じですか?今見ている例外の発生元となった例外の情報です。再帰的に潜ってすべてのMessageを見ると、原因が書いてあるかもしれません。 また、Exceptionで受けていても、生成されたオブジェクトの型は変わらないので、Exception.GetType().ToString()で、なんという例外が発生したのかがわかります。その型にキャストすると、より有用な情報が表示できる可能性があります。例えば、OleDbExceptionが発生しているのであれば、Errorsプロパティにより、OLEで発生したエラーの詳細を参照できます。 ←キャストするのではなく、元からその型で受けるようにしてください。 try catch ex as oledbexception catch ex as argumentexception catch ex ... end try 例外は、多くの場合「エラー処理」といわれますが、「例外的な状況が発生した場合の、状況情報を収集する手段」でもあるので、有効に活用してください。←逆に言えば、自分が例外を生成するときはそれだけの情報を詰め込むように気を配れ、ということ。 | ||||
|
投稿日時: 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 | ||||
|
投稿日時: 2003-08-29 11:32
エラーになる場合と、ならない場合で、接続文字列が変わったりしていませんか? 使い終わった接続を、ちゃんと閉じていますか?接続数が上限に達しているとかの問題ではないでしょうか? 例外の型は、とりあえずcatch ex as exceptionの中に、 debug.writeline(e.message, e.gettype.tostring) を入れてください。すると、「出力」ウインドウにメッセージと型が表示されます。それを頼りにcatchを増やしてください。なお、innerexceptionの例外を拾うことはできません。それは内部でキャッチされ、他のexceptionに変換(という言い方が正しいとは思わないが)されて送出されているからです。 | ||||
|
投稿日時: 2003-09-02 09:55
Jittaさま
ご指摘ありがとうございました。 ご指摘のとおりにDebug.WriteLineをいれいろいろとやっている最中です。 また、なにか壁にぶつかりましたら質問させていただきます。 |