2017-04-08 54 views
-1

我是ASP.net的新手,目前无法创建简单的登录表单。建立到我的数据库的连接后,我希望函数检查数据库中是否存在用户名和密码的组合。由于我还没有创建“成员区域”页面,所以如果数据有效并且在相反的情况下返回“登录失败”,它应该什么也不做。出于某种原因,它不起作用。如果有人能帮我追踪这个问题,我会很高兴。在ASP.net中登录表单不起作用

protected void Login_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new 
SqlConnection(ConfigurationManager.ConnectionStrings["connect"].ToString()); 
    string query = "SELECT * FROM users WHERE username='" + UserName.Text + 
"' AND password='" + Password.Text + "' "; 
    SqlCommand cmd = new SqlCommand(query, con); 
    string output = cmd.ExecuteScalar().ToString(); 

    if (output == "1") 
    { 
     //Creating a session for the user 
     Session["user"] = UserName.Text; 
     Response.Redirect(""); 
    } 
    else 
     Response.Write("Login failed."); 

} 
+0

什么错误。你应该使用调试器来查明。 – siddstuff

+0

没有错误,但页面只是重新加载而没有其他任何事情发生。 –

+0

你应该研究参数化查询和sql注入。你的代码现在是脆弱的。 – VDWWD

回答

1

您在查询SELECT * FROM和你正在使用ExecuteScalar方法来检查是否返回任何东西。

您应该使用SELECT COUNT(*) FROM来获取表中给定用户名和密码的行数。

另一件不合适的代码是生成查询。使用参数化查询是最推荐的方法。

protected void Login_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["connect"].ToString()); 

    string query = "SELECT COUNT(*) FROM users WHERE [email protected] AND [email protected]"; 
    SqlCommand cmd = new SqlCommand(query, con); 
    cmd.Parameters.Add(new SqlParameter("@userName", UserName.Text)); 
    cmd.Parameters.Add(new SqlParameter("@password", Password.Text)); 
    con.Open(); 
    string output = cmd.ExecuteScalar().ToString(); 

    if (output == "1") 
    { 
     //Creating a session for the user 
     Session["user"] = UserName.Text; 
     Response.Redirect(""); 
    } 
    else 
    { 
     Response.Write("Login failed."); 
    } 

这应该可以解决您的问题。

0

你忘了开执行的ExecuteScalar之前的连接()

protected void Login_Click(object sender, EventArgs e) 
{ 
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["connect"].ToString()); 

string query = "SELECT COUNT(*) FROM users WHERE [email protected] AND [email protected]"; 
SqlCommand cmd = new SqlCommand(query, con); 
cmd.Parameters.Add(new SqlParameter("@userName", UserName.Text)); 
cmd.Parameters.Add(new SqlParameter("@password", Password.Text)); 

//Add Below line and test your code. 
con.Open(); 

string output = cmd.ExecuteScalar().ToString(); 

if (output == "1") 
{ 
    //Creating a session for the user 
    Session["user"] = UserName.Text; 
    Response.Redirect(""); 
} 
else 
{ 
    Response.Write("Login failed."); 
}