回 帖 发 新 帖 刷新版面

主题:[原创]一个c#+sql的问题

不好意思,又来烦劳各位大虾




/**最近写了一个登陆程序,但总有一个问题想不明白,为什么只能判断第一条记
*录正确,而第二条记录即是输入了正确的用户名和密码也判断是错误的,问题出
*在哪里.请高手指教,具体代码如下,我的界面是
*两个label,两个textbox,两个button**/

private void btnEnter_Click(object sender, System.EventArgs e)
        {
            string userName=txtName.Text;            

    //用来存储用户的姓名
            string userPWD=txtPWD.Text;            

        //用来存储用户的密码
            
            SqlConnection sqlconn=new SqlConnection

("server=.;uid=sa;database=login");
            sqlconn.Open();
            string sql="select pname,ppwd from [person]";    

    //用来存储查询语句
            
            SqlCommand commnd = new SqlCommand

(sql,sqlconn);
            
            SqlDataReader newSqlReader = 

commnd.ExecuteReader();


            while(newSqlReader.Read())        //循环

读取数据库的记录
            {
                //如果用户名和密码与数据库中的记录匹配
                if(newSqlReader.GetString(0) == 

userName.Trim() && newSqlReader.GetString(1) == userPWD.Trim())
                {
                    

this.DialogResult=DialogResult.OK;
                    MessageBox.Show("登陆成功");    

                //则执行登陆成功语句
                    break;
                }

                //如果用户名和密码与数据库中的记录不匹


                else
                {
                    MessageBox.Show("错误的用户名及

密码");            //则执行登陆失败语句
                    break;
                }
            }

            
            newSqlReader.Close();
            sqlconn.Close();
        }
    }
}

回复列表 (共5个回复)

沙发

你的问题是否是 当你输入数据库中的指定表中的用户名和密码的时候,登陆成功。
但是从第二条记录开始就不行了。。。
   答案就是:你的这段代码逻辑有问题,分支语句写错了。
    while(newSqlReader.Read())---〉这条语句执行记录中每项数据的查询。
      1.) 当前记录的用户名=控件用户名 & 当前记录的密码 = 控件密码, 则执行@1.
          否则执行@2.
         @1.显示登陆成功,并跳出循环.
         @2.显示登陆失败,并跳出循环
      每一个判断分支,最后的执行执行跳出循环。根本不可能检索所有的记录,只单单检索第一个记录就匆匆跳出来了。所以当只有写入第一个数据时才会登陆成功。

板凳

while(newSqlReader.Read())        //循环

读取数据库的记录
            {
                //如果用户名和密码与数据库中的记录匹配
                if(newSqlReader.GetString(0) == 

userName.Trim() && newSqlReader.GetString(1) == userPWD.Trim())
                {
                    

this.DialogResult=DialogResult.OK;
                    MessageBox.Show("登陆成功");    
                    bolLog = true;//实现生命的一个Bool变量
                //则执行登陆成功语句
                    break;
                }

                //如果用户名和密码与数据库中的记录不匹


                else
                {
                     bolLog = false;//实现生命的一个Bool变量
                }
            }
            if (bolLog == false) 
            {
                  MessageBox.Show("错误的用户名及密码");              
             }

3 楼

事先声明---〉实现生命   。。。。。不好意思

4 楼

那在加一个判断,如果数据库里没有这个用户名,这个判断该如何写

5 楼

汗....如果用户名不存在,那newSqlReader.Read()=null;

我来回复

您尚未登录,请登录后再回复。点此登录或注册