1

我正在尝试制作一个简单的登录页面,用户输入 ID 和密码,然后从下拉列表中选择角色:学生、管理员或讲师。这是代码:

protected void loginButton_Click(object sender, EventArgs e)
{

    SqlConnection con = new SqlConnection();
    con.ConnectionString = "Data Source=.\\SQLEXPRESS;Initial Catalog=University;Integrated Security=True;Pooling=False";
    //myConn.Open();
    //string strqry = "Insert into students values (" + TextBox1.Text +
    //",'" + TextBox2.Text + "','" + TextBox3.Text + "')";
    //SqlCommand myCom = new SqlCommand(strqry, myConn);
    //int numrow = myCom.ExecuteNonQuery();
    //myConn.Close();

    Int32 verify;
    string query1 = "Select count(*) from Login where ID='" + idBox.Text + "' and Password='" + passwordBox.Text + "' and Type='"+ LoginAs.Text +"'" ;
    SqlCommand cmd1 = new SqlCommand(query1, con);
    con.Open();
    verify = Convert.ToInt32(cmd1.ExecuteScalar());
    con.Close();
    if (verify > 0)
    {
        Response.Redirect("succesful.aspx");
    }
    else
    {
        Response.Redirect("unsuccesful.aspx",true);
    }

}

问题是,当我尝试不检查名为“LoginAs”的下拉列表的值时,它可以正常工作并进行验证。但是,当我还检查类型(学生、管理员或讲师)时,即使所有信息都正确,它也总是无法成功登录。谁能帮我找出问题所在?

谢谢

4

3 回答 3

0

使用参数化查询也许它会得到解决,你会防止像这样的风险

cmd1.Parameters.AddWithValue("@ID", idBox.Text);
于 2013-05-17T19:45:18.450 回答
0

试试 SqlDataReader 类。如果发生读取,您可以捕获。这是链接。虽然情况并非如此,但我建议您在数据库中使用标量函数或使用 EntityFramework 或其他 ORM 工具。

于 2013-05-17T11:37:34.873 回答
0

首先要检查的是:

  1. 所有的字母应该有相同的大小写。
  2. 角色应该在数据库和应用程序中被截断

但是,最好使用 enum/int 来定义用户的角色而不是文本名称。

于 2013-05-14T08:05:54.030 回答