2013-10-11 29 views
1

大家好我有一个大学项目,我正在编写一个登录屏幕,我的教科书太模糊了,我不知道如何显示一个消息框,如果用户名不在数据库内。这里是我的代码:如果用户名不在数据库中,如何显示消息框? C#

public void login() 
     { 
      //try 
      //{ 
       var tbl = from s in this.database1DataSet.employee 
          where s.Username == userNameBox.Text 
          select s; 

       foreach (var s in tbl) 
       { 
        if (s.Username == userNameBox.Text && s.Password == passwordBox.Text) 
        { 
         MessageBox.Show("Access granted welcome " + s.fName); 
         this.Close(); 
        } 
        else 
        { 
         MessageBox.Show("Access denied invalid login details"); 
        } 

       } 
      //} 
      /*catch (SyntaxErrorException) 
      { 
       MessageBox.Show("User Does not exist"); 
      }*/`enter code here` 
+7

**不要明文存储密码**。 – SLaks

+0

那么,什么是不工作? – AlexB

+0

if(tbl.Count()== 0) – ilmatte

回答

0

您可以检查像一个用户的所有脑干:

if(!database1DataSet.employee.Any(r=> r.Username == userNameBox.Text)) 
{ 
    MesasgeBox.Show("User does not exist"); 
} 

而且IMO,它的更好,如果你检查用户名和密码一起,并显示一个消息像"Invalid Username/password",而不是多个消息。

var user = database1DataSet 
        .employee 
        .FirstOrDefault(r=> r.Username == userNameBox.Text && 
           r.Password == passwordBox.Text) 

if(user != null) 
{ 
    MessageBox.Show("Access granted welcome " + user.fName); 
    this.Close(); 

} 
else 
{ 
    MessageBox.Show("Invalid username/password"); 
} 

另见:Why encrypt user passwords?

4

如果您where条款不符合任何用户,也不会在结果的任何行。
因此,你的循环将永远不会执行。

取而代之,您可以拨打FirstOrDefault()获取第一个结果行,或者如果没有任何结果,则可以拨打null

+0

我必须在哪里添加它?你能改正代码吗? –

0

我相信你想:

所有的
var user = (from s in this.database1DataSet.employee 
      where s.Username == userNameBox.Text && 
      s.Password == passwordBox.Text 
      select s).FirstOrDefault(); 

if(user != null{ 
    MessageBox.Show("Access granted welcome " + s.fName); 
    this.Close(); 
} 
else{ 
    MessageBox.Show("Access denied invalid login details"); 
} 
0
void login() 
    { 
      var tbl = from s in this.database1DataSet.employee 
         where s.Username == userNameBox.Text 
         select s; 

      if(tbl.Count() == 0) 
      { 
       MessageBox.Show("User Does not exist"); 
       return; // or this.Close(); if it's what you want 
      } 

      foreach (var s in tbl) 
      { 
       if (s.Username == userNameBox.Text && s.Password == passwordBox.Text) 
       { 
        MessageBox.Show("Access granted welcome " + s.fName); 
        this.Close(); 
       } 
       else 
       { 
        MessageBox.Show("Access denied invalid login details"); 
       } 

      } 
0

首先,假设你的用户名是唯一的,你仅会在TBL 0或1的值。这很好,但要注意它。其次,你希望具有tbl大小的不同功能是0或1.这很容易用if语句完成。如果有条目,请检查凭据。否则,显示无效用户名的错误消息。由于这是一个课程项目,我不会为您编写示例代码,但这应该足以让它工作。祝你好运!

相关问题