如何检查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);
    }
}

我遇到的问题是登录凭据总是失败,即使我有一些虚拟凭据添加到数据库。否则,我可以访问和打开数据库和/或读/写信息到它。

如何检查access数据库中的用户名和密码

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