[ad_1]
やあ..
グリッドビューに更新パネルを挿入しましたが、プログラムを実行するとこのエラーが発生します
Object reference not set to an instance of an object.
来ました。グリッドビューの前にフォームタグを置くとうまく機能しますが、ページがリロードされますが、グリッドビューでデータベースを検索して検索ボタンを押したときにページがリロードされないようにします。フォームタグを削除するとエラーが発生します。この問題を解決するにはどうすればよいですか?また、ブレークポイント、ユーザーID、セッションなどを使用してユーザーIDとセッションユーザー名を確認し、正常に動作し、ユーザーIDとユーザー名、コマンドなどからの値を確認します。
私が試したこと:
これが私のaspxコードです:
<asp:Content ID="Content2" ContentPlaceHolderID="body" Runat="Server"> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> Search Database <asp:TextBox runat="server" ID="txtSrch" CssClass="txtSrch" Font-Size="Medium" Width="200px" Height="35px" placeholder="Database Name"></asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" CssClass="srchreq" ControlToValidate="txtSrch" runat="server" ForeColor="Red" ErrorMessage="Name is required"></asp:RequiredFieldValidator> <br /> <br /> <asp:Button CssClass="searchDb" ID="btn" runat="server" Text="Search" OnClick="Search"/> <asp:GridView ID="GridView1" runat="server" Height="63px" style="margin-left: 270px; margin-top: 6px" Width="434px" CellPadding="3" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px"> <FooterStyle BackColor="White" ForeColor="#000066" /> <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" /> <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" /> <RowStyle ForeColor="#000066" /> <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" /> <SortedAscendingCellStyle BackColor="#F1F1F1" /> <SortedAscendingHeaderStyle BackColor="#007DBB" /> <SortedDescendingCellStyle BackColor="#CAC9C9" /> <SortedDescendingHeaderStyle BackColor="#00547E" /> </asp:GridView> <br /> </ContentTemplate> </asp:UpdatePanel> </asp:Content>
そしてこれがaspx.csコードです:
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { string user = Session["name"].ToString(); SqlConnection cnn = new SqlConnection("Data Source=HAMEED_KHAN\\SQLEXPRESS;Initial Catalog=db_compiler;Integrated Security=True"); SqlCommand cmd2 = new SqlCommand("SELECT User_ID from tbl_user WHERE User_Name='" + user + "'", cnn); cnn.Open(); string id = cmd2.ExecuteScalar().ToString(); int ID = Int32.Parse(id); SqlCommand cmd = new SqlCommand("SELECT Database_Name,Description,Date FROM Create_db WHERE User_ID='" + ID + "'", cnn); DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(dt); GridView1.DataSource = dt; GridView1.DataBind(); cmd.ExecuteNonQuery(); cnn.Close(); } } //here is my search method public override void VerifyRenderingInServerForm(Control control) { }
解決策 1
これは私たちが尋ねられる最も一般的な問題の 1 つであり、私たちが答える能力が最も低い問題でもありますが、あなたには自分自身で答える能力が最も備わっています。
エラーの意味を簡単に説明します。変数、プロパティ、またはメソッドの戻り値を使用しようとしましたが、null が含まれています。これは、変数にクラスのインスタンスが存在しないことを意味します。
これはポケットに似ています。シャツにペンを入れるためのポケットがあります。 ポケットに手を入れても、そこにペンがないことがわかったら、紙に自分の名前を署名することはできません。署名しようとすると、非常に面白い見た目になるでしょう。 空のポケットでは null 値 (ここにはペンがありません!) が与えられるため、ペンを取り出した後は通常行うような操作ができなくなります。 なぜ空いているのでしょうか? それが問題です。もしかしたら、あなたは今朝家を出るときにペンを拾うのを忘れたのかもしれません。あるいは、昨夜シャツを脱いだときにペンを昨日のシャツのポケットの中に入れたままにしたのかもしれません。
私たちはその場にいなかったのでわかりません。さらに重要なことに、ポケットの中に何が入っているかはおろか、あなたのシャツさえ見えません。
コンピュータに戻ると、あなたも同じことを何らかの形で行っていますが、私たちはあなたのコードを見ることはできず、ましてやコードを実行して、null が含まれているべきではないものを見つけることもできません。
しかし、それは可能です。ここでは Visual Studio が役に立ちます。 デバッガーでプログラムを実行すると、プログラムが失敗すると、問題が見つかった行が VS によって表示されます。 次に、そのさまざまな部分を調べてどの値が null であるかを確認し、コードを遡ってその理由を調べることができます。 したがって、エラー行を含むメソッドの先頭にブレークポイントを設定し、プログラムを最初から再度実行します。 今回は、VS はエラーが発生する前に停止し、コードをステップ実行して値を確認することで、何が起こっているかを調べることができます。
しかし、私たちにはそれはできません。私たちはあなたの完全なコードを持っていません、もし持っていたとしてもそれをどう使うかわかりません、そしてあなたのデータを持っていません。 ぜひ試してみてください。どれだけの情報が得られるか試してみてください。
解決策 3
「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というメッセージを含む例外がスローされる場所が示されていませんでした。
心配無用。 これは、検出して修正するのが最も簡単なケースの 1 つです。 これは単に、ある参照型の一部のメンバー/変数が、そのインスタンス (非静的) メンバーの と を使用して逆参照されることを意味します。そのためには、このメンバー/変数が null でないことが必要ですが、実際には null であるように見えます。 デバッガーで実行するだけで、例外がスローされた場所で実行が停止されます。 その行にブレークポイントを置き、アプリケーションを再起動して、再びこの点に戻ります。 次の行に含まれるすべての参照を評価し、null でない必要があるのにどれが null であるかを確認します。 これを理解したら、コードを修正します。メンバー/変数が null 以外の参照に適切に初期化されていることを確認するか、null かどうかを確認し、null の場合は別の処理を行います。
こちらもご覧ください: ボタンクリックで次のレコードを表示したい。 しかし、次のレコード関数の if 条件でエラーが発生しました「オブジェクト参照がオブジェクトのインスタンスに設定されていません」。
場合によっては、何らかの理由でデバッガでは実行できないことがあります。 本当に厄介なケースの 1 つは、デバッグ情報が利用できないときにソフトウェアが構築された場合にのみ問題が現れる場合です。 この場合、より困難な方法を使用する必要があります。 まず、例外をサイレントに処理することで例外の伝播をブロックしないようにする必要があります (これは開発者自身に対する犯罪ですが、非常によくあることです)。 各スレッドの最上位スタック フレームですべての例外を絶対にキャッチする必要があります。 型の例外を処理すれば実行できます System.Exception
。 ハンドラーでは、すべての例外情報、特に例外情報をログに記録する必要があります。 System.Exception.StackTrace
:
http://msdn.microsoft.com/en-us/library/system.Exception.aspx、
http://msdn.microsoft.com/en-us/library/system.Exception.stacktrace.aspx。
スタック トレースは、throw ステートメントからハンドラーまでの例外伝播の完全なパスを示す単なる文字列です。 読めば必ず終わりが見えてきます。 ロギングの場合、(ほとんどの場合) クラスを使用するのが最善です。 System.Diagnostics.EventLog
:
http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.aspx。
幸運を、
解決策 2
どのコード行でエラーが発生しますか? 詳しく説明してください。
コード行のオブジェクトが NULL かどうかを確認します。
解決策 4
<コンテンツテンプレート>
データベースの検索
protected void Page_Load(オブジェクト送信者, EventArgs e)
{
if (!Page.IsPostBack)
{
文字列ユーザー = セッション[“name”].ToString();
SqlConnection cnn = new SqlConnection(“データ ソース = HAMEED_KHAN\\SQLEXPRESS;初期カタログ = db_compiler;統合セキュリティ = True”);
SqlCommand cmd2 = new SqlCommand(“SELECT User_ID from tbl_user WHERE User_Name=”” + user + “””, cnn);
cnn.Open();
文字列 ID = cmd2.ExecuteScalar().ToString();
int ID = Int32.Parse(id);
SqlCommand cmd = new SqlCommand(“SELECT データベース名,説明,日付 FROM Create_db WHERE User_ID='” + ID + “‘”, cnn);
DataTable dt = 新しい DataTable();
SqlDataAdapter da = 新しい SqlDataAdapter(cmd);
da.Fill(dt);
GridView1.DataSource = dt;
GridView1.DataBind();
cmd.ExecuteNonQuery();
cnn.Close();
}
}
//これが私の検索方法です
public override void VerifyRenderingInServerForm(コントロールコントロール)
{
}
[ad_2]
コメント