1

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

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`
4

5 回答 5

4

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

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

于 2013-10-11T14:53:16.827 回答
1

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

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

另请参阅:为什么要加密用户密码?

于 2013-10-11T14:57:29.670 回答
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");
 }
于 2013-10-11T14:56:10.747 回答
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");
                }

            }
于 2013-10-11T14:56:14.343 回答
0

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

于 2013-10-11T14:57:12.023 回答