-2

私は C# を初めて使用し、エラーを解決するのに苦労しています。ログインすると、次のエラーが表示されます。

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

これはテーブルが存在しないことを意味することはわかっていますが、どうすれば修正できますか? 私のデータベースには 4 つのテーブルが含まれており、参照しているテーブルはデータベースの 3 番目のテーブルです (これが役立つかどうかはわかりません)。さらに情報が必要な場合は教えてください。構文エラーが発生しないため、ループのどこかに問題があると思います。

Web ユーザー コントロールのログイン コード (背景情報のみ)

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
       <% if (Session["Patient"] == "Logged In")
        { %> 
                <asp:Button ID="Logout" runat="server" Text="Logout" onclick="Logout_Click" />&nbsp;<br /><br />
                <a>Continue to:</a> &nbsp; <asp:LinkButton ID="homepage" runat="server" PostBackUrl="~/home.aspx">Home page</asp:LinkButton>|
                <asp:LinkButton ID="book_appointment" runat="server" PostBackUrl="~/appointments.aspx">Book an Appointment</asp:LinkButton>
                <asp:HyperLink ID="HyperLink1" runat="server" Visible="false">HyperLink</asp:HyperLink>
        <% }
            else
        { %>
        <br />
                <a>Username: 
                <asp:TextBox ID="username" runat="server"></asp:TextBox> <br /><br />
                Password: 
                <asp:TextBox ID="password" runat="server" TextMode="Password"></asp:TextBox> </a><br /><br />
                <asp:Button ID="Login" runat="server" Text="Login" onclick="Login_Click" />
                &nbsp;<asp:LinkButton ID="linkRegister" runat="server" PostBackUrl="~/register.aspx">Register</asp:LinkButton><br /><br />
                <a><asp:Literal ID="literal1" runat="server"></asp:Literal></a><br /><br />
        <% } %>

これは、私のログイン コントロールの背後にあるコードです。

protected void Login_Click(object sender, EventArgs e)
{

    cQuery record = new cQuery(); //declare instance
    record.Sqlstring = "SELECT username, password FROM dbo.patient_details"; //what to get from database -- sql query
    DataSet data = record.SelectStatement(); //put info into dataset

    DataTable table = data.Tables[0];
    foreach (DataRow row in table.Rows)
    {
        if (row[0].ToString() == username.Text)
        {
            if (row[1].ToString() == password.Text)
            {
                Session["Patient"] = row[0];
                Response.Redirect("myaccount.aspx");
                return;
            }
        }
    } }
4

1 に答える 1

2

これは、テーブルが存在しないことを意味します

いいえ、そうではありません。テーブルが存在しない場合、SQL エラーが発生します。

それが意味することは(確認していない、投稿したメソッドで発生していると仮定して)以下の変数の1つがnullであることです:

row[0]
row[1]
username
password

nullパスワード付きのレコードがないか、コントロールが動的に作成されていない限り、これは疑問usernameですpassword。例外のスタック トレースを確認すると、エラーが発生した場所を特定できるはずです。

于 2013-08-29T17:23:43.397 に答える