如何检查access数据库中的用户名和密码
本文关键字:用户 密码 数据库 access 何检查 检查 | 更新日期: 2023-09-27 17:49:42
我遵循了youtube上的一些教程,并提出了以下代码。我的目标是允许用户一旦登录到程序就可以管理其他用户。
private void txtBoxLogin_Click(object sender, EventArgs e)
{
try
{
OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=S:'Docket'Database1.accdb;
Persist Security Info=False;");
string cmdText = "select * from login where Username=" + "? and [Password]=?";
OleDbCommand cmd = new OleDbCommand(cmdText,connection);
{
connection.Open();
cmd.Parameters.AddWithValue("@p1", txtboxUsername.Text);
cmd.Parameters.AddWithValue("@p2", txtBoxPassword.Text);
int result = (int)cmd.ExecuteScalar();
if (result > 0)
MessageBox.Show("Success");
else
MessageBox.Show("Fail");
}
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error" + ex);
}
}
我遇到的问题是登录凭据总是失败,即使我有一些虚拟凭据添加到数据库。否则,我可以访问和打开数据库和/或读/写信息到它。
int result = (int)cmd.ExecuteScalar();
将执行查询并向result
返回一行,这里的查询是
select * from login where Username=" + "? and [Password]=?"
因此,如果表中有任何行存在给定的详细信息,它将返回该行并尝试在result
中分配
因此您需要检查表中是否存在具有给定用户名和密码的行,并返回存在的行数。所以使用
select count(*) from login where Username=" + "? and [Password]=?"
和do
int result = (int)cmd.ExecuteScalar();
现在result
将有0
,如果没有行存在给定的详细信息,否则它将返回number of rows
存在给定的值
**Please try to save password in encrypted format
instead of plain text for security reasons