问题描述
以下这个代码,登陆错误会提示n次,如果输入正确,页面不跳转,请大神帮帮我。protectedvoiddlbutton_Click(objectsender,EventArgse){stringlianjie=ConfigurationManager.ConnectionStrings["lianjieshujuku"].ConnectionString;SqlConnectionconn=newSqlConnection(lianjie);conn.Open();SqlCommandcmd=newSqlCommand();cmd.Connection=conn;cmd.CommandText="select*fromuserinfo";SqlDataReaderdr=cmd.ExecuteReader();while(dr.Read()){if(tname.Text==dr["姓名"].ToString()&&tmima.Text==dr["密码"].ToString()){Session["username"]=tname.Text;Session["zhiwu"]=dr["职务"].ToString();Response.Redirect("main.aspx");break;}else{Response.Write("<script>alert('输入有误,请重新输入!');</script>");continue;}}if(conn.State==ConnectionState.Open){conn.Close;}}
解决方案
解决方案二:
while循环当然会提示N次你在验证成功的逻辑里没有做跳转代码你写出来知道什么意思me?
解决方案三:
感觉逻辑有点问题,为什么要去所有数据呢?取满足条件的那一条不就行了?SELECT*FROMUSERINFOWHEREUSERNAME='ADMIN'ANDPASSWORD=''XXXXXXX'
解决方案四:
按照2楼说的即可,但是按照你的做法,逻辑应该这样:while(dr.Read()){Session["username"]=“”if(tname.Text==dr["姓名"].ToString()&&tmima.Text==dr["密码"].ToString()){Session["username"]=tname.Text;Session["zhiwu"]=dr["职务"].ToString();Response.Redirect("main.aspx");break;}}If(Session["username"]==""){Response.Write("<script>alert('输入有误,请重新输入!');</script>");}
解决方案五:
登陆要把所有的用户信息都都读取出来进行比较,这什么鬼?
解决方案六:
楼上说的对的只要取一条符合记录就可以了有符合记录就跳转如果没有符合记录就提示错误
解决方案七:
cmd.CommandText="select*fromuserinfowhereusername="+tname.Text+"password="+tmima.Text;这样不是会更快吗,为啥要全部循环呢
解决方案八:
谢谢大家我明白了,没错不应该全部读出来的。
解决方案九:
谢谢大家我明白了,没错不应该全部读出来的。
解决方案十:
谢谢大家我明白了,没错不应该全部读出来的。
解决方案十一:
首选不管其他的,看语句,用if,或者else下面continue换成break;
解决方案十二:
登录账号核对下就好没必要一条条比较
解决方案十三:
引用6楼lutaotony的回复:
cmd.CommandText="select*fromuserinfowhereusername="+tname.Text+"password="+tmima.Text;这样不是会更快吗,为啥要全部循环呢
登录不需要比较的,只用select语句查询取默认第一条数据就可以了