- PR -

[ASP.NET+ADO.NET]NullReferenceExceptionエラー

投稿者投稿内容
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2005-05-11 16:27
引用:

ttcoupeさんの書き込み (2005-05-11 16:15) より:
エラー発生時にどこのステップでエラーが発生しているかを調べようと、デバッグを行うと
ビルドされるせいなのか、正常に動作してしまいます。
この時、トレースできるのでしょうか?


ん?となると
> Application("OraConn")に対してNullReferenceExceptionエラーが
> 返されることがあります。
のように、Application("OraConn")のところでNullReferenceExceptionが発生しているというのはどうやって分かったんでしょう?
スタックトレースとかで見たわけではないですか?
※っていうか、スタックトレースだとステップまでは分からないって話でしょうか?

なんか別の処理で発生してるんじゃないですか?
メソッドレベルでは分かるはずですから、そのメソッド内でNullReferenceExceptionが発生しそうな箇所はないでしょうか?
ttcoupe
大ベテラン
会議室デビュー日: 2003/01/17
投稿数: 116
お住まい・勤務地: 大阪市
投稿日時: 2005-05-11 16:52
引用:

なちゃさんの書き込み (2005-05-11 16:27) より:
引用:

ttcoupeさんの書き込み (2005-05-11 16:15) より:
エラー発生時にどこのステップでエラーが発生しているかを調べようと、デバッグを行うと
ビルドされるせいなのか、正常に動作してしまいます。
この時、トレースできるのでしょうか?


ん?となると
> Application("OraConn")に対してNullReferenceExceptionエラーが
> 返されることがあります。
のように、Application("OraConn")のところでNullReferenceExceptionが発生しているというのはどうやって分かったんでしょう?
スタックトレースとかで見たわけではないですか?
※っていうか、スタックトレースだとステップまでは分からないって話でしょうか?

なんか別の処理で発生してるんじゃないですか?
メソッドレベルでは分かるはずですから、そのメソッド内でNullReferenceExceptionが発生しそうな箇所はないでしょうか?




なぜ、Application("OraConn")なのかという事ですが、
スタックトレースより判断したエラー発生関数内では
1つ文字列型の変数を使用している以外はApplication("OraConn")とOleDb関連
の変数しか扱っていないからです。
文字列型の変数はメソッドを使用していないですし。

どう思われますでしょうか。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-05-11 17:30
引用:

エラー発生時にどこのステップでエラーが発生しているかを調べようと、デバッグを行うと
ビルドされるせいなのか、正常に動作してしまいます。



ブラウザの更新ボタンを連打すれば出ませんか?
複数のクライアントからブラウザの更新ボタンを連打するとか。
ttcoupe
大ベテラン
会議室デビュー日: 2003/01/17
投稿数: 116
お住まい・勤務地: 大阪市
投稿日時: 2005-05-11 18:21
ありがとうございます。
試してみます。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-05-11 19:32
 設計がメチャメチャ、よくこんな設計でGo出したなぁ...ってのが感想なのですが、作り直しはできないのでしょうね。


 エラーの原因は、確実につかんでください。
引用:

スタックトレースより判断したエラー発生関数内では
1つ文字列型の変数を使用している以外はApplication("OraConn")とOleDb関連
の変数しか扱っていないからです。


こんな憶測では、まったく違うところを直そうとしている可能性があります。


 今でも直せそうなところとして、Application(...)を対象オブジェクトとして使っているところを、すべて対象の型で受けるように直してください。これ、暗黙の型変換を多用しており、とてもパフォーマンスが悪いです。
コード:
Application("OraConn").Open()
これだと、毎回"OraConn"を探して、
それの型を検索して変換し、
Openメソッドを呼び出す、
ということをする
  ↓
Dim cnn As OleDbConnection
cnn = CType(Application("OraConn"), OleDbConnection)
cnn.Open()
これ以降、cnnを使えば、検索や型変換は行わない


Application("OraConn")はObject型であり、Openメソッドは持っていません。後で直そうとしてみたときに、迷いませんか?
というか、"OraConn"で示されるオブジェクトとして何が入っているのかわからないので、本当にこのコードが正しいのか、わかりません。少なくとも、プロジェクトに参加していない人に聞くときに提示していいコードではありません。

 また、これがOleDbConnectionのオブジェクトだとして、CloseメソッドはDisposeメソッドと同等であることを理解していますか?Closeしたデータベース接続を、再びOpenすることはできません。


 その他、なちゃさんの指摘されていることは頻出していることなのですが、ttcoupeさんって、結構長くいらっしゃいますよね?もしかして、自分のした質問とか、検索したスレッドしか見ていない?もしそうなら、とりあえずタイトルだけ眺めて、自分の仕事と関係のありそうなスレッドには目を通すことを薦めます。



引用:

エラー発生時にどこのステップでエラーが発生しているかを調べようと、デバッグを行うとビルドされるせいなのか、正常に動作してしまいます。


 デバッグメニューの中から起動中のプロセスにアタッチすることができます。
 または、Debug.Writeでどこまで実行したか書くとか、try〜catchをいれて、catchの中にブレークポイントを設定し、待ってみるとか。
_________________

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