if( (thisReader["UserName"].ToString()==this.LoginName.Text) && (thisReader["UserCode"].ToString()==this.LoginCode.Text) )

解决方案 »

  1.   

    逻辑上有错误---应该在找到相应的用户名和密码后立即退出循环,你那种写法只有在最后一条记录正确的情况下才能正确登录!
       可以这样写 while(thisReader.Read())
    {
                if(thisReader["UserName"].ToString()==this.LoginName.Text&&thisReader ["UserCode"].ToString()==this.LoginCode.Text)
    {
    MessageBox.Show("Have Logined");
    result="1";
                                                           break; }
             }
    if(result==null)
    {
    result="0";
    MessageBox.Show("No Data Find");
    }


      

  2.   

    继续请教高手,依照上面的代码改正后依然只是执行else语句
      

  3.   

    while(thisReader.Read())
    {
                if((string)thisReader["UserName"]==this.LoginName.Text.Trim()&&(string)thisReader ["UserCode"]==this.LoginCode.Text.Trim())
               {
    MessageBox.Show("Have Logined");
    result="1";
                                                           break; }
             }if(result==null)
    {
    result="0";
    MessageBox.Show("No Data Find");
    }
      

  4.   

    thisReader["UserName"]是个OBJECT对象,你要转成STRING
      

  5.   

    你的代码我没有仔细看。因为网页里面显示的格式不是很好,所以……
    我的建议:
    自己写个类userDB,这个类里面有个check方法,bool 类型
    public bool check(string username,string userpsw)
    {
       //这里对用户名和密码进行验证
       //建议使用sql = "select count(*) from tablename where username=@username and userpsw=@userpsw" 
       //然后使用SqlParameter
    }然后在按钮点击事件里面
    private void LoginOk_Click(object sender, System.EventArgs e)
    {
    userDB userdb = new userDB();
    bool result = userdb.check(this.txtUserName.Text,this.txtUserpsw.Text)
    //接着做其他事情
    }
      

  6.   

    同意 lxhlizhenhao(黎冠黎) ( ) 信誉:100  2004-07-09 22:54:00  得分: 0  
     
    不过我一般用sql去找,加参数 username usercode 找到一条记录则登录正确,找到两条或以上就报管理员有重名(不太可能),找不到记录则无法登录。
      

  7.   

    谢谢各位提供这么多解决的方法,我将试一试
    //////////////////////////////////////////////////////////////
    现在用这条语句
    if((this.LoginName.Text==thisReader["UserName"].ToString())&&(this.LoginCode.Text)==thisReader ["UserCode"].ToString()))
    可以执行if语句了,但是有一个小问题是它只能读取除第一行数据以外的数据,这是为什么?不是Read()应该从第一个数据开始遍历吗?
      

  8.   

    直接用SQL语句哪,为何要遍历整个表呢??
      

  9.   

    我的理解:生成一个DataReader对象以后指针指向的是第一条记录的前面位置。read()方法把记录位置向后移动一个位置。
      

  10.   

    private void LoginOk_Click(object sender, System.EventArgs e)
    {
    try
    {
    string result=null;
    SqlConnection thisCon=new SqlConnection(@"Data Source=BILLGATES;Integrated Security=SSPI;Initial Catalog=LibraryManager");
    thisCon.Open();
    SqlCommand thisCommand=thisCon.CreateCommand(); thisCommand.CommandText="Select UserName,UserCode from Login where UserName='"+this.LoginName.Text+"' and UserCode='"+this.LoginCode.Text+"'";
    SqlDataReader thisReader=thisCommand.ExecuteReader();
    if(thisReader.Read())
    {
                      MessageBox.Show("Have Logined");
    result="1";
                                         }
    else
    {

    MessageBox.Show("No Data Find");
                                                  result="0";
    }
    }
    catch(SqlException ex)
    {
    MessageBox.Show(ex.Message.ToString());
    }
    }
      

  11.   

    回复人: bineon(雪冬寒) ( ) 信誉:88  2004-07-10 10:44:00  得分: 0  
     
     
       我的理解:生成一个DataReader对象以后指针指向的是第一条记录的前面位置。read()方法把记录位置向后移动一个位置。
    错!!就是从第一条读取,如果从第二条读取了,肯定是程序中有错,给你错觉了。
      

  12.   

    result
    問題出在RETURN ,只要第一條不符﹐則不會再找第二條了
    把result="0";
    MessageBox.Show("No Data Find");放在WHILE之外就可以了
      

  13.   

    楼主麻烦了,用个dataset,用where语句,if dataset  count〉0 pass
    else
    。。
    end if
      

  14.   

    老大你的条件不对!优先级!加括号!
    (thisReader["UserName"].ToString()==this.LoginName.Text||thisReader["UserCode"].ToString()==this.LoginCode.Text)
      

  15.   

    1.用&&代替||
    2.thisReader中的数据你监视过吗,看看它的值吧!!!
      

  16.   

    用 do 进行判断。第一次while thisReader.Read()会将指针指向第二条记录,如果你的第一条记录是符合的,那后面自然就没有!你可以跟踪数据源的,就知道为什么会执行ELSE啦!干吗不直接在SQL里加条件上??
    WHILE语句多余了