- PR -

オブジェクト参照がオブジェクト インスタンスに設定されていません

投稿者投稿内容
shellken
会議室デビュー日: 2008/09/09
投稿数: 11
投稿日時: 2008-09-09 14:17
さかもとさんの書き込み (2008-09-09 10:32) より:
>Dim tb As New 予約DataSet.予約DataTable
>ここを
>↓
>Dim tb As 予約DataSet.予約DataTable
>と変更したらどうなりますか?


tb = New 予約DataSet.予約DataTable
r = tb.New予約Row
tb.Add予約Row(r)
ta.Update(tb)の4か所の部分に波線が入りビルドできません。

>IIS上(別PC)に置いたときのtableadapterから見たmdbのパス(接続文字列)
>ってどうなっていますか?
mdbのパスは普通にAPP_DATAに入っています。
申し訳ありません。tableadapterから見たmdbのパスという意味がいまいち分からないのですが...


shellken
会議室デビュー日: 2008/09/09
投稿数: 11
投稿日時: 2008-09-09 14:19
しかし、解発環境上ではうまくいくので、どうしてweb上だとうまくいかないのかというところに何かヒントはないでしょうか?
皆さんがおっしゃるには新しいインスタンスを生成しているところに問題があるようですがどうもうまくいきません。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-09-09 14:34
引用:

shellkenさんの書き込み (2008-09-09 14:19) より:
しかし、解発環境上ではうまくいくので、どうしてweb上だとうまくいかないのかというところに何かヒントはないでしょうか?
皆さんがおっしゃるには新しいインスタンスを生成しているところに問題があるようですがどうもうまくいきません。



そのためには、ta.Update(tb) で発生した例外を知る必要があるのですが、
現在は Catch 節の中にある

lblMessage.Text = ex.GetBaseException.Message

が、おそらくは ex.GetBaseException が Nothing であるために NullReferenceException を発生させているため、誰にもわからないという状態です。

とりあえずその箇所を、

lblMessage.Text = ex.Message

に書き換えてください。
おそらくこれだけだと情報が足りないので、さらにその行にブレークポイントを置いて、
ブレークポイントに止まったときに ex の内容を確認してみてください。

[追記]
ex.GetBaseException が Nothing ってのは嘘かも。。。
[/追記]

[ メッセージ編集済み 編集者: rain 編集日時 2008-09-09 14:56 ]
ひでたつ
常連さん
会議室デビュー日: 2002/08/09
投稿数: 28
お住まい・勤務地: 岩手県
投稿日時: 2008-09-09 14:52
Jitta さんも指摘されていますが、本当に
引用:
ta.Update(tb)<−−−−−−−ここでエラーが出る


のか怪しいので、1行毎に実行された形跡を残すような
ログをファイルに書き込んでみてはどうですか?

それと、とりあえず Catch 文を一つにしておくとか…。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2008-09-09 15:31
開発環境では上手くいくけどWebサーバーでエラーが出る、
という言葉から考えられるのは環境の違いだと思います。
環境は全く一緒なんでしょうか。
その点で私が気になるのはさかもとさんと同じく接続文字列ですね。
開発環境からは有効な接続文字列だけど、Webサーバーからは有効ではない
接続文字列なんでは、と。

あとどうでもいいかも知れませんが
r.時間 = Label3.Text
という行が2つあるのが気になります。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-09-09 15:40
> 開発環境では上手くいくけどWebサーバーでエラーが出る、
> という言葉から考えられるのは環境の違いだと思います。

同感。
そのうえで気になるのはファイルのアクセス権ですね。
Accessをお使いとのことなので、ファイルをサーバ上においていると思いますが、
開発サーバでの実行時とIISでの実行時の実行ユーザが異なることは認識されて
ますでしょうか。
実行ユーザがAccessのファイルに対して書き換えの権限とかを持っていないのでは
ないかと思います。

#ただ、その場合エラーメッセージが違うものになりそうなんですけどね。。。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-09-09 21:37
引用:

shellkenさんの書き込み (2008-09-09 14:09) より:
>ここで発生しているエラーによって、「オブジェクト参照がオブジェクト
>インスタンスに設定されていません」というメッセージが表示されていますか?
>それを、どうやって確認しましたか?

Catch ex As Exception
lblMessage.Text = ex.GetBaseException.Message
Return
End Try
のところで発生しています


>おそらく、ta.Update で発生するエラーはデータベースがらみのもので、
>別のメッセージが表示されていると思います。「オブジェクト参照…」
>のメッセージは、キャッチ句内で発生した別の例外だと思います。

。「オブジェクト参照…」のメッセージは確かにキャッチ句内で発生しています。


 catch 句内で発生していることを、どのようにして確認しましたか?
 確認方法が確かだとすると、何らかの例外が発生し、catch 句に飛んできたが、ここでさらに別の要因で例外が発生しているということになります。

 私の投稿について、前回も今回も、例外が発生している場所の確認であること、そこで発生していることをどうやって確認したかの問い合わせであることに注意してください。トラブル シューティングの第一歩は、現状の把握です。


 最初の投稿には、「一度WEBサイトのコピーを取りlocalhostやIISを使ったWEB上(別のパソコン)で実行すると上記のエラーが出ます。」と書かれています。このため、例外が発生している環境では開発ツールがインストールされていないと考えられます。そのため、確認します。どうやって、例外が発生している箇所を特定しましたか?
 発生している例外の種類と、その例外を生成したものが特定されないと、推測しかできません。私の質問は、「ta.Update で NullReferrenceException は発生しないだろう」という推測によります。

--------------------------------------------------
引用:

>「As New」という書き方で、どのようなことが起こるか、
>正しく把握していますか?

新しいインスタンスができていると思っていますが詳しくは理解していません。


 はい、宣言と同時に新しいインスタンスが生成されます。したがって、次の行で new、新しいインスタンスを作って代入しているため、無駄になります。

引用:

>病院の診察予約のようですが、Access で大丈夫?

どのような問題がありますか?


 Access は、個人が、個人的に使用することを想定して作られています。複数の人が同時にアクセスした場合に、ファイルが壊れる可能性があります。ただし、この情報によると、AccessDataSource<microsoft.com> を使えば、大丈夫だそうです。
(これ、System.Web.UI の下にあるよ...Windows アプリで共有ディレクトリに置いたりすると、使えないのかなぁ?)
shellken
会議室デビュー日: 2008/09/09
投稿数: 11
投稿日時: 2008-09-09 23:17
catchのなかにいれて出るのですが
Catch ex As Exception
lblMessage.Text = ex.GetBaseException.Message
Return
の3行を消してしまうと以下のように出ます。
*********************************************************************
オブジェクト参照がオブジェクト インスタンスに設定されていません。
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

例外の詳細: System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。

ソース エラー:

ハンドルされていない例外を生成したソース コードは、デバッグ モードでコンパイルされた場合のみ表示できます。これを有効にするには、以下の手順に従い、URL を要求してください。

1. "Debug=true" ディレクティブをエラーを生成したファイルの上に追加してください。例:

<%@ Page Language="C#" Debug="true" %>

または:

2. 以下のセクションをアプリケーションの構成ファイルに追加します。

<configuration>
<system.web>
<compilation debug="true"/>
</system.web>
</configuration>

2 番目の方法を使った場合、指定されたアプリケーション内のすべてのファイルがデバッグ モードでコンパイルされます。最初の方法を使った場合は、指定した特定のファイルのみがデバッグ モードでコンパイルされます。

重要: デバッグ モードでアプリケーションを実行してもメモリおよびパフォーマンスのオーバーヘッドが発生します。製品シナリオに配置する前にアプリケーションでデバッグが無効にされていることを確認してください。

スタック トレース:


[NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。]
予約DataSetTableAdapters.予約TableAdapter.InitConnection() +56
予約DataSetTableAdapters.予約TableAdapter.InitAdapter() +560
予約DataSetTableAdapters.予約TableAdapter.Update(予約DataTable dataTable) +18
Yoyaku_Kakunin_Pt.Button1_Click(Object sender, EventArgs e) +428
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +105
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +107
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1746
************************************************************************
そこで
ソースファイルの1行目に Debug="true"と入れました。

<%@ Page Language="VB" Debug="true" AutoEventWireup="false" CodeFile="Yoyaku_Kakunin_Pt.aspx.vb" Inherits="Yoyaku_Kakunin_Pt" %>

そして
開発環境外(同じパソコンで、IISを使ってアドレスにhttp://localhost/...とでる環境です)で実行すると以下のメッセージがブラウザ上に出ます。


************************************************************************
オブジェクト参照がオブジェクト インスタンスに設定されていません。
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

例外の詳細: System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。

ソース エラー:


行 74: tb.Add予約Row(r)
行 75:
行 76: ta.Update(tb)<−−−−ココが赤くなる
行 77: Response.Redirect("keka2.aspx")
行 78:


ソース ファイル: C:\\Inetpub\\Yoyaku_Kakunin_Pt.aspx.vb 行: 76

スタック トレース:


[NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。]
予約DataSetTableAdapters.予約TableAdapter.InitConnection() +56
予約DataSetTableAdapters.予約TableAdapter.InitAdapter() +560
予約DataSetTableAdapters.予約TableAdapter.Update(予約DataTable dataTable) +18
Yoyaku_Kakunin_Pt.Button1_Click(Object sender, EventArgs e) in C:\\Inetpub\\Yoyaku_Kakunin_Pt.aspx.vb:76
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +105
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +107
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1746




--------------------------------------------------------------------------------
バージョン情報: Microsoft .NET Framework バージョン:2.0.50727.1433; ASP.NET バージョン:2.0.50727.1433

このような感じですがいかがでしょうか?
やはり書き込みのところでエラーが出ているようです。

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