我遵循了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]=?"
并做
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句