- - PR -
オブジェクト参照エラーについて
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-08-26 13:38
ASP.NETでWebアプリを開発しているのですが、 同じプログラム、同じ環境で、 「オブジェクト参照がオブジェクト インスタンスに設定されていません」というエラーが出るときと出ないときがあります。 皆様はこのようなご経験はありますか? もしこのようなエラーが出た場合の対処方法などがありましたらご教授ください。 | ||||||||
|
投稿日時: 2003-08-26 14:08
同じプログラム、同じ環境とありますが、他の条件もすべて同じですか? 遷移元ページは同じですか?遷移元ページで入力したデータは同じですか? そのページで(DBなどから)参照しているデータの内容は同じですか? それらがまったく同じでないなら、普通に起こりうることです。 NullReferenceExceptionが起きているだけなので、 こういう場合はほぼ間違いなく自分のプログラムの不具合です。 使用している変数で初期化していないものはないですか? 遷移元ページからSessionなどで引き渡されている情報はnull(Nothig)ではないですか?
どこで発生しているか?を突き止めて、どのデータがnullになっているか確認し、 それに応じて原因となっている個所を修正します。 後、「ここではxxxというデータが渡されてくるはず」といったような仮定はせずに、 本当にその通りになっているかどうかエラーチェックをするようにした方がよいでしょう。 | ||||||||
|
投稿日時: 2003-08-26 15:52
よねKEN さま
ご指摘ありがとうございます。 質問をしておきながらあいまいな問いかけで申しわけありませんでした。 もう一度質問を書き直しますと 遷移元も遷移先も同じ、入力した条件も同じ、DBからデータを取得するSQL文も同じ時に データを取得して配列で返す場合とデータを取得できずにNothingで返す場合があります。 その結果、そのあとのデータの表示部でオブジェクト参照エラーが発生してしまいます。 コードは下記のような感じで書いてあります。 [例] dim strData() as string 'データ格納配列 dim strSql as string 'SQL文 clsdb.DBConnect() 'データベースに接続 clsdb.DBQuery(strSql) 'SQL実行 strData = clsdb.GetData() 'データの取得 if strData(0) = "0000" then ←オブジェクト参照エラー発生場所 . . . | ||||||||
|
投稿日時: 2003-08-26 16:38
こういう場合、とりあえずブレークポイントを張って、SQL文が意図したとおりに構成されているか調べます。
こっちのページでは発生せず、あっちのページでは必ず発生するというのであれば、Webアプリケーションの特性(ユーザからのアクションを受けるときは、毎回新しいオブジェクトが作成されている)を理解していないためと思われます。 | ||||||||
|
投稿日時: 2003-08-26 16:53
そこで例外があがっているのであれば、 > clsdb.GetData() 'データの取得 が期待するデータを返していないと思われます。 clsdbという変数の型は何でしょう。 使用しているメソッドの名前からすると独自のクラスと思いますが、 DBConnectメソッドは正常に処理されていますか? 例えば、内部でExceptionをCatchしつつ、エラーがあがっていても無視していれば、 コネクションを貼るのに失敗したまま処理を続行しているというようなこともありえます。 また、接続が成功したかどうかを戻り値で戻しているようなタイプのメソッドであれば、 その値をチェックする必要もありますが、 提示の情報からでは私にはその辺りに問題がないのかどうか判断できませんので ご自身でご確認ください。 次の、DBQueryメソッドも同様に正常に処理されているかご確認ください。 後は、念のため、strSqlの中身を使用しているDBMSのツールなどから流して、 正常に結果を取得できるかどうか確認しましょう。 そこまでOKであれば、GetDataメソッドの中身も順に確認しましょう。 | ||||||||
|
投稿日時: 2003-08-26 16:59
Nothingで返されるんだったらそれはもうエラーになりそうな気がしますが… | ||||||||
|
投稿日時: 2003-08-26 19:04
皆様 ご指摘ありがとうございました。 皆様のご指摘のように一つ一つブレイクポイントを立てチェックした結果、 Olacleに接続できている場合とできていない場合で私が質問したエラーが起こることが分かりました。 現状では、なぜOlacleに接続できる場合とできない場合があるのかを調査中です。 | ||||||||
|
投稿日時: 2003-08-27 08:34
Exceptionが発生していると思いますが、Exception.Messageはご覧になりましたか?また、Exceptionの型も重要な情報です。すべてをわかってExceptionをキャッチしているならよいのですが、そうでないなら、まずはExceptionを受けずにメッセージを表示させ、一通りのテスト終了後に受けるように修正する、とした方がよいでしょう。 せっかく提供されている情報があるのにそれを利用しないなら、時間と労力を無駄にするだけですよ。 |