【问题标题】:How do I show a message box if the username is not in a database? C#如果用户名不在数据库中,如何显示消息框? C#
【发布时间】:2013-10-11 14:50:53
【问题描述】:

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

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`

【问题讨论】:

  • 不要以纯文本形式存储密码
  • 那么,什么不起作用?
  • @SLaks,这通常是正确的,但这可能不一定是他的任务的要求
  • 通常,您希望为“不存在”的用户和“获取错误凭据”的用户提供相同的消息。这样做的原因是有人可以通过检查“用户不存在”或“无效登录凭据”来发现和推断另一个人的用户名。
  • 我同意我们只用 C# 编写代码 2 个月,所以我认为密集的安全性不属于范围。我只需要它登录或告诉我用户不存在

标签: c# database foreach


【解决方案1】:

如果您的 where 子句不匹配任何用户,则结果中不会有任何行。
因此,您的循环将永远不会执行。

相反,您可以调用FirstOrDefault() 来获取第一个结果行,如果没有,则可以调用null

【讨论】:

    【解决方案2】:

    您可以检查用户是否存在,例如:

    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?

    【讨论】:

      【解决方案3】:

      我相信你想要:

      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");
       }
      

      【讨论】:

        【解决方案4】:
        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");
                        }
        
                    }
        

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-09-15
            • 1970-01-01
            • 1970-01-01
            • 2017-10-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多