如果用户名不在数据库中,如何显示消息框?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#编写代码才两个月,所以我认为强化安全不属于这一范围。我只需要它登录或告诉我,该用户不存在