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.");
}
它总是在我点击登录按钮时登录,我甚至没有在用户/通行证文本框中输入任何内容,并且我的访问数据库中没有注册空白 有什么建议吗?
答案 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]= @? ";