单击登录按钮后,就算输入错的用户名和密码,也能跳到指定页面请高手帮忙改下: 
aseClass bc = new BaseClass(); 
    protected void Page_Load(object sender, EventArgs e) 
    {     } 
    protected void Button_Click(object sender, EventArgs e) 
    { 
        DataSet ds=bc.GetDataSet("select count(*) from tb_Admin where AdminName='"+this.txt1.Text+"'and Password='"+this.txt3.Text+"'","tb_Admin"); 
        if(ds.Tables[0].Rows.Count>0) 
        { 
            bc.ExecSQL("update tb_Admin set LoadDate='"+DateTime.Now+"'where AdminName='"+this.txt1.Text+"'"); 
            Session["CurrentUser"]=this.txt1.Text; 
            Response.Redirect("~/Default.aspx"); 
        } 
        else 
        { 
            Response.Write(bc.MessageBox("用户名错误!")); 
        }

解决方案 »

  1.   

    if(ds.Tables[0].Rows.Count>0) 
    =====================================
    判断有问题
    就改为:
    if(ds.Tables[0].Rows[0][0] != "0") 
      

  2.   

    因为你返回的是DataTable,内存表。表中不管你有没有符合条件的记录,返回的结果始终是一行一列的表,即如果用户名或密码错误,返回的结果在DataTable中应该是0;如果正确应该是1
      

  3.   

            if(ds.Tables[0].Rows.Count>0) 
            { 
                bc.ExecSQL("update tb_Admin set LoadDate='"+DateTime.Now+"'where AdminName='"+this.txt1.Text+"'"); 
                //Session["CurrentUser"]=this.txt1.Text; 
                //Response.Redirect("~/Default.aspx"); 

            } 
            else 
            { 
                Response.Write(bc.MessageBox("用户名错误!")); 
            }
            Session["CurrentUser"]=this.txt1.Text; 
            Response.Redirect("~/Default.aspx");
     
      

  4.   

    单步跟踪下
    select count(*) from tb_Admin where AdminName='"+this.txt1.Text+"'and Password='"+this.txt3.Text+"'
    在查询里执行看看
      

  5.   

    public SqlDataReader GetReader(string Sql,out SqlDataReader reader) 
            { 
                SqlCommand cmd = new SqlCommand(Sql, Connection); 
                reader = cmd.ExecuteReader(); 
                Connection.Close(); 
                Connection.Dispose(); 
                return reader; 
            } 
      

  6.   

    select count(*) 始终都会返回一个矢量数据代表总记录数,所以用Rows.Count进行判断总是大于0
    改成 select *
      

  7.   

    "select count(*) from tb_Admin where AdminName='"+this.txt1.Text+"'and Password='"+this.txt3.Text+"'"  这句始终会返回一个 数值的吧!!!   你登录错误用户名它也会 返回 0 这个数字你把 0 放在 datatable 里 datatable  始终是一个1行1列的 表 count 始终是大于0 的 
      

  8.   

    一个select count而已,有必要用ds方式吗,浪费感情。没必要这样,返回首行首列的结果就可以。会用事件探查器吗,用事件探查器看一下传到sql的内容,放到查询分析器里,如果sql语句没问题那就是逻辑错误。
      

  9.   

    2楼的正解
    if(ds.Tables[0].Rows.Count>0)
    =====================================
    判断有问题
    就改为:
    if(ds.Tables[0].Rows[0][0] != "0") 如果你 有错误的话,那就是if(ds.Tables[0].Rows[0][0].ToString() != "0")