如果用户名不在数据库中,如何显示消息框?C#

如果用户名不在数据库中,如何显示消息框?C#,c#,database,foreach,C#,Database,Foreach,大家好,我有一个大学项目,我正在编写一个登录屏幕,我的文本太模糊了,如果用户名不在数据库中,我不知道如何显示消息框。这是我的密码: public void login() { //try //{ var tbl = from s in this.database1DataSet.employee where s.Username == userNam

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

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`

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


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

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

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

我相信您需要:

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");
 }
我相信你想要:

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

首先,假设您的用户名是唯一的,那么tbl中只有0或1个值。那很好,但是要注意。第二,您希望有不同的功能,tbl的大小为0或1。使用if语句很容易做到这一点。如果有条目,请检查凭据。否则,显示无效用户名的错误消息。由于这是一个课程项目,我不会为您实际编写示例代码,但这应该足以让它正常工作。祝你好运

首先,假设您的用户名是唯一的,那么tbl中只有0或1个值。那很好,但是要注意。第二,您希望有不同的功能,tbl的大小为0或1。使用if语句很容易做到这一点。如果有条目,请检查凭据。否则,显示无效用户名的错误消息。由于这是一个课程项目,我不会为您实际编写示例代码,但这应该足以让它正常工作。祝你好运

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

if(!database1DataSet.employee.Any(r=> r.Username == userNameBox.Text))
{
    MesasgeBox.Show("User does not exist");
}
此外,在我看来,最好同时检查用户名和密码,并显示一条类似于
“无效用户名/密码”
的消息,而不是多条消息

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

另请参见:

您可以检查是否存在以下用户:

if(!database1DataSet.employee.Any(r=> r.Username == userNameBox.Text))
{
    MesasgeBox.Show("User does not exist");
}
此外,在我看来,最好同时检查用户名和密码,并显示一条类似于
“无效用户名/密码”
的消息,而不是多条消息

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

另请参见:

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