- - PR -
オブジェクト参照がオブジェクト インスタンスに設定されていません
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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のパスという意味がいまいち分からないのですが... | ||||||||||||
|
投稿日時: 2008-09-09 14:19
しかし、解発環境上ではうまくいくので、どうしてweb上だとうまくいかないのかというところに何かヒントはないでしょうか?
皆さんがおっしゃるには新しいインスタンスを生成しているところに問題があるようですがどうもうまくいきません。 | ||||||||||||
|
投稿日時: 2008-09-09 14:34
そのためには、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 ] | ||||||||||||
|
投稿日時: 2008-09-09 14:52
Jitta さんも指摘されていますが、本当に
のか怪しいので、1行毎に実行された形跡を残すような ログをファイルに書き込んでみてはどうですか? それと、とりあえず Catch 文を一つにしておくとか…。 | ||||||||||||
|
投稿日時: 2008-09-09 15:31
開発環境では上手くいくけどWebサーバーでエラーが出る、
という言葉から考えられるのは環境の違いだと思います。 環境は全く一緒なんでしょうか。 その点で私が気になるのはさかもとさんと同じく接続文字列ですね。 開発環境からは有効な接続文字列だけど、Webサーバーからは有効ではない 接続文字列なんでは、と。 あとどうでもいいかも知れませんが r.時間 = Label3.Text という行が2つあるのが気になります。 | ||||||||||||
|
投稿日時: 2008-09-09 15:40
> 開発環境では上手くいくけどWebサーバーでエラーが出る、
> という言葉から考えられるのは環境の違いだと思います。 同感。 そのうえで気になるのはファイルのアクセス権ですね。 Accessをお使いとのことなので、ファイルをサーバ上においていると思いますが、 開発サーバでの実行時とIISでの実行時の実行ユーザが異なることは認識されて ますでしょうか。 実行ユーザがAccessのファイルに対して書き換えの権限とかを持っていないのでは ないかと思います。 #ただ、その場合エラーメッセージが違うものになりそうなんですけどね。。。 | ||||||||||||
|
投稿日時: 2008-09-09 21:37
catch 句内で発生していることを、どのようにして確認しましたか? 確認方法が確かだとすると、何らかの例外が発生し、catch 句に飛んできたが、ここでさらに別の要因で例外が発生しているということになります。 私の投稿について、前回も今回も、例外が発生している場所の確認であること、そこで発生していることをどうやって確認したかの問い合わせであることに注意してください。トラブル シューティングの第一歩は、現状の把握です。 最初の投稿には、「一度WEBサイトのコピーを取りlocalhostやIISを使ったWEB上(別のパソコン)で実行すると上記のエラーが出ます。」と書かれています。このため、例外が発生している環境では開発ツールがインストールされていないと考えられます。そのため、確認します。どうやって、例外が発生している箇所を特定しましたか? 発生している例外の種類と、その例外を生成したものが特定されないと、推測しかできません。私の質問は、「ta.Update で NullReferrenceException は発生しないだろう」という推測によります。 --------------------------------------------------
はい、宣言と同時に新しいインスタンスが生成されます。したがって、次の行で new、新しいインスタンスを作って代入しているため、無駄になります。
Access は、個人が、個人的に使用することを想定して作られています。複数の人が同時にアクセスした場合に、ファイルが壊れる可能性があります。ただし、この情報によると、AccessDataSource<microsoft.com> を使えば、大丈夫だそうです。 (これ、System.Web.UI の下にあるよ...Windows アプリで共有ディレクトリに置いたりすると、使えないのかなぁ?) | ||||||||||||
|
投稿日時: 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 このような感じですがいかがでしょうか? やはり書き込みのところでエラーが出ているようです。 |