2013-10-11 55 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語句完成。如果有條目,請檢查憑據。否則,顯示無效用戶名的錯誤消息。由於這是一個課程項目,我不會爲您編寫示例代碼,但這應該足以讓它工作。祝你好運!

相關問題