2016-10-22 12 views
-3

admin/usersとしてログインしようとすると「オブジェクトのインスタンスがオブジェクトのインスタンスに設定されていません。ユーザが正常にページにログインすると、以下のaspx.cs.コードとリンクされる別のクラスファイルの名前connectionclass.csは、ナビゲーションバーの「ようこそ、(ユーザー名)」を示すために使用されます。ユーザーがログインしようとしたときにオブジェクト参照がオブジェクトのインスタンスに設定されていない

//Store login variables in session 
      Session["login"] = users.Username; 
      Session["type"] = users.User_Type; 

When i try to login, it shows this error:

ASPX:

<div style="text-align:center"> 
      Username: 
      <asp:TextBox ID="txtLogin" runat="server" CssClass="inputs"></asp:TextBox> 
      <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
       ErrorMessage="*Username is required" ForeColor="Red" ControlToValidate="txtLogin"></asp:RequiredFieldValidator> 

      <div>Password: 
      <asp:TextBox ID="txtPassword" runat="server" TextMode="Password" CssClass="inputs"></asp:TextBox> 
      <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" 
       ErrorMessage="*Password is required" ForeColor="Red" ControlToValidate="txtPassword"></asp:RequiredFieldValidator> 
      <br /> 
       <asp:Label ID="lblError" runat="server" Text=""></asp:Label> 
      <asp:Button ID="btnLogin" runat="server" Text="Log In" OnClick="btnLogin_Click" CssClass="button" /><br /> 

       </div> 

ASPX.CS:

protected void btnLogin_Click(object sender, EventArgs e) 
{ 

    Users users = ConnectionClass.LoginUser(txtLogin.Text, txtPassword.Text); 



    SqlConnection con = new SqlConnection(@"Data Source=NOONS\SQLEXPRESS;Initial Catalog=StudentFeedbackSystemDB;Integrated Security=True"); 
    string cmdStr = "select user_type from users where username='" + txtLogin.Text + "' AND password = '" + txtPassword.Text + "'"; 


    SqlCommand cmd = new SqlCommand(cmdStr, con); 
    con.Open(); 
    Object user_type = cmd.ExecuteScalar(); 
    con.Close(); 

    if (user_type != null) 
    { 
     lblError.Visible = false; 
     lblError.Text = ""; 
     if (user_type.ToString() == "administrator") 
     { 
      //Store login variables in session 
      Session["login"] = users.Username; 
      Session["type"] = users.User_Type; 

      Response.Redirect("~/Pages/Admin/AdminHome.aspx"); 
     } 
     else if (user_type.ToString() == "users") 
     { 
      //Store login variables in session 
      Session["login"] = users.Username; 
      Session["type"] = users.User_Type; 

      Response.Redirect("~/StudentHome.aspx"); 
     } 
    } 
     else 
     { 
      lblError.Visible = true; 
      lblError.Text = "*Invalid Username and Password"; 
      lblError.ForeColor = System.Drawing.Color.Red; 
     } 
    } 
} 

ConnectionClass.cs

public static Users LoginUser(string username, string password) 
{ 
    //check if user exists 
    string query = string.Format("SELECT COUNT(*) FROM StudentFeedbackSystemDB.dbo.Users WHERE username = '{0}'", username); 
    command.CommandText = query; 

    try 
    { 
     conn.Open(); 
     int amountOfUsers = (int)command.ExecuteScalar(); 

     if(amountOfUsers == 1) 
     { 
      //if users exist, check if the password match 
      query = string.Format("SELECT password FROM Users WHERE username = '{0}'", username); 
       command.CommandText = query; 
      string dbPassword = command.ExecuteScalar().ToString(); 

      if(dbPassword == password) 
      { 
       //if password are match, retrieve user data from the database 
       query = string.Format("SELECT user_type FROM [Users] WHERE username ='{0}'", username); 
       command.CommandText = query; 

       SqlDataReader reader = command.ExecuteReader(); 
       Users users = null; 

       while (reader.Read()) 
       { 
        string user_type = reader.GetString(0); 

        users = new Users(username, password, user_type); 
       } 
       return users; 
      } 
      else 
      { 
       //if password dont match 
       return null; 
      } 
     } 
     else 
     { 
      //if user exist 
      return null; 
     } 
    } 
    finally 
    { 
     conn.Close(); 
     } 
} 
+0

あなたのコードでは、セマンティクスとして 'null'を使わないでください。あなたのシステムの中で 'null 'を渡すことは、遅かれ早かれNullReferenceExeptionを避けられません。代わりに、ログイン試行をモデル化するクラスを作成します。おそらく、ログイン試行が成功したかどうかを示すboolプロパティがあります。ログインが失敗した理由を示す列挙型。このクラスを返すのではなく、 'Users'または' null'を返します。 –

答えて

0

あなたは...以下のように

ユーザーユーザーをLoginUserメソッドを呼び出すためです= ConnectionClass.LoginUser(txtLogin.Text、 txtPassword.Text);

...検証に失敗するたびにNULL(ユーザが存在しないかパスワードが間違っている)が返されます。ですから、正しく入力したユーザ名とパスワードをダブルチェックしてください。あるいはLoginUserメソッドをデバッグして、nullのどれがnullを返すかを判断してください。

+0

ユーザー名とパスワードを正しく入力しましたが、それでもエラーが表示されました。他の解決策はありますか? –

+0

アプリケーションとデータベースのコンテキストを知らなくても、言うことは難しいです。デバッガを実行し、行単位でLoginUserメソッドを実行してください。どちらの行にエラーが発生しているかがわかります。それは助けになるはずです。 –

関連する問題