我不输入任何帐户,但仍在登录中

时间:2014-10-09 13:01:26

标签: c# database ms-access

        private void btnLogin_Click(object sender, EventArgs e)
        {
            {
            Connections.con.Open();      

            string login = "SELECT ID, Username, [Password] FROM Employee";
            OleDbCommand command = new OleDbCommand(login, Connections.con);
            command.Connection = Connections.con;   
            command.Parameters.AddWithValue("@?", txtLUser.Text.ToString());
            command.Parameters.AddWithValue("@?", txtLPass.Text.ToString());
            OleDbDataReader reader = command.ExecuteReader();
            int count = 0;                
            while (reader.Read())
            {
                count = count + 1;
                break;
            }

            if (count == 1)
            {
                MessageBox.Show("Login Successful.");
                this.Close();
            }  
            else
            {
                MessageBox.Show("Please enter a valid Username or Password");
            }

            Connections.con.Dispose();
            Connections.con.Close();

            MessageBox.Show("Thank you for using this Simple Login/Registration Form.");
        }

它总是在我点击登录按钮时登录,我甚至没有在用户/通行证文本框中输入任何内容,并且我的访问数据库中没有注册空白 有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您实际上并未检查用户名和密码。查看数据库查询:

"SELECT ID, Username, [Password] FROM Employee"

这将从Employee表中选择每个记录。然后你检查那些记录:

while (reader.Read())
{
    count = count + 1;
    break;
}

if (count == 1)
{
    MessageBox.Show("Login Successful.");
    this.Close();
}

根据这个逻辑,只要Employee表中存在任何记录,登录就会成功。

可能想要仅检查匹配提供的凭据的记录。像这样:

"SELECT [ID], [Username], [Password] FROM [Employee] WHERE [Username] = @? AND [Password] = @?"

(我根据您添加参数的方式猜测参数语法,因为我不熟悉MS Access语法。但希望您明白这一点。)

此外,这很重要,您似乎以纯文本格式存储用户密码。这是非常可怕的事情。请正确填写密码,以便不能将其作为纯文本阅读。

此外,您似乎正在使用共享连接对象:

Connections.con.Open();

这将导致一系列问题。在使用它的方法范围内创建连接对象要简单得多,也更稳定。基本上,连接对象应该在非常狭窄的范围内创建,使用和处理,并且不应泄漏到该范围之外。

答案 1 :(得分:1)

你遗漏了属性

string login = "SELECT ID, Username, [Password] FROM Employee where Username=@? and [Password]= @? ";