我刚学习ASP.NET写了个登录页面,出现一个问题private void btnsumbit_Click(object sender, System.EventArgs e)
{
SqlConnection conn=new SqlConnection("server=wang-669dc1249a;database=TingYu;integrated security=true;");

SqlCommand comm = new SqlCommand("select username,password from userinfo ",conn); conn.Open();
SqlDataReader myread= comm.ExecuteReader();

while(myread.Read())
{
string username= Convert.ToString(myread["username"]); //把从数据库读来的数据显式的转化为字符串格式
string password= Convert.ToString(myread["password"]);
if(txtname.Text == username && txtpass.Text == password)
{
Label3.Text="That is OK";
}
else
{
Label3.Text="Username or Password is Error";
} }
myread.NextResult();
conn.Close();


}
然后进行调试;  输入用户名和密码
 如果我输入的用户名和密码是 用户表中排在最后一行的,会正确的显示,
如果不是最后一行 则不会正确的显示.比如 我连接的数据表是userinfo  
里面有三行数据 (username password 是表的列)
 username  password 
   A         a1
   B         b2
   C         c3在登录页面 输入 用户名 C  密码 c3
则会显示 That is OK如果输入其他  A   a1   或者  B  b2  都显示Username or Password is Error而我的愿意是  只要是输入
 A         a1
 B         b2
 C         c3
应该都是 That is OK我百思不得其解,请高手帮帮忙

解决方案 »

  1.   

    SqlCommand comm = new SqlCommand(""select count(*) from userinfo where username like '"+TextBox1.Text +"' and password like '"+TextBox2.Text +"'";",conn);
    comm.Connection .Open ();
    int flag=(int)comm.ExecuteScalar ();
    comm.Connection .Close ();
    if(flag>0){Label3.Text="That is OK";}
    else{Label3.Text="Username or Password is"; }
      

  2.   

    myread.NextResult();
    你用这句是用着干什么啊?
    去掉应该就可以了,
    试试吧!
      

  3.   

    你的整个逻辑教是错误的,比如,我输入了 b b2, 看一下你的这段代码做了什么,
    1.先检查 A a1, 当然是失败了,显示Username or Password is Error
    2.检查 B b2, 成功, 显示OK
    3.检查 C C3, 失败, 又显示Error,
    显然,只要不是C C3, 即使成功, 也会因为最后一行失败,而显示Error
    正确的代码是:
    string sel = "select count(*) from ... where username = ... and password = ...";
    int cnt  = (int) comm.ExecuteScalar(sel);
    if (cnt == 1)
      成功
    else
     失败QQ476619652