2

我有一个登录页面,我在其中编写了代码来登录管理部分,但它不起作用我不知道这是什么问题,代码是正确的,但仍然获得未经授权的访问。帮帮我

  string str = ConfigurationManager.ConnectionStrings["ottscon"].ConnectionString;
        using (SqlConnection con = new SqlConnection(str))
        {
            SqlCommand cmd = new SqlCommand("Select UserName,Password from login where UserName=@userid and Password=@passid", con);
            con.Open();
            cmd.Parameters.AddWithValue("@userid", TextBox1.ToString());
            cmd.Parameters.AddWithValue("@passid", TextBox2.ToString());
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataSet ds= new DataSet();
            da.Fill(ds);
            if (ds.Tables[0].Rows.Count>0)
            {

               Session["login"] = TextBox1.Text;
               Response.Redirect("admintrator123/Default.aspx");
            }
            else
            {
                Label1.Text = "Unauthorized Access";
                Label1.ForeColor = System.Drawing.Color.Red;
            }
        }
4

3 回答 3

2

您没有正确传递值

TextBox1.ToString()是错的

利用

TextBox1.Text

于 2015-08-27T07:26:51.403 回答
0

首先使用文本框内文本的值(现有的ToString()是返回对象的类型TextBox):

cmd.Parameters.AddWithValue("@userid", TextBox1.Text);
cmd.Parameters.AddWithValue("@passid", TextBox2.Text);

尝试使用此 SQL 检查记录是否存在(在 内new SqlCommand()):

SELECT CASE WHEN EXISTS (
    SELECT *
    FROM [login]
    WHERE UserName=@userid and Password=@passid
)
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT) END

因此,您可以检查 bool 而不是行存在,并对正在发生的事情有更多的了解。

在此之后,您可以通过这种方式读取值:

using (var reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        bool exist = reader.GetBoolean(0);
    }
}
于 2015-08-27T07:23:14.773 回答
-3

尝试

logincommand = "Select UserName,Password from login where UserName='"+TextBox1.Text+"' and Password='"+TextBox2.Text+"'"
SqlCommand cmd = new SqlCommand(logincommand ,con);

并删除

        cmd.Parameters.AddWithValue("@userid", TextBox1.ToString());
        cmd.Parameters.AddWithValue("@passid", TextBox2.ToString());
于 2015-08-27T07:24:02.963 回答