我有这个登录代码,如果数据库中只有一个用户,但是如果我添加另一个用户,然后使用该帐户登录,则会弹出“错误的用户名或密码”消息,但是当我单击“确定”时,它会重定向我Form1。
private void buttonLogin_Click(object sender, EventArgs e)
{
SQLiteConnection conn = new SQLiteConnection("data source = zivali.sqlite");
conn.Open();
SQLiteCommand com = new SQLiteCommand(conn);
com.CommandText = "SELECT * FROM login;";
SQLiteDataReader reader = com.ExecuteReader();
while (reader.Read())
{
string username = reader["username"].ToString();
string password = reader["password"].ToString();
if (username == textBoxUserName.Text && password == textBoxPassword.Text)
{
this.Hide();
Form1 f1 = new Form1();
f1.ShowDialog();
}
else
{
MessageBox.Show("Wrong username or password");
}
}
conn.Close();
}
答案 0 :(得分:1)
如果你有一个用户,while循环将循环一次。因此,while会检查用户是否存在,否则会显示一个消息框。
如果您有多个用户。比while循环运行X次。但是当它循环第一次并且凭证与给定的不匹配时它将显示消息框。
你说你已经添加了第二个用户。因此,当您使用该第二个用户登录时,第一个用户在循环时将为false。这就是它显示消息框的原因。
要解决此问题,您可以尝试以下方法:
SQLiteConnection conn = new SQLiteConnection("data source = zivali.sqlite");
conn.Open();
SQLiteCommand com = new SQLiteCommand(conn);
com.CommandText = "SELECT * FROM login;";
SQLiteDataReader reader = com.ExecuteReader();
// place your username/password decleration here, no need to read them X times in a loop
string username = reader["username"].ToString();
string password = reader["password"].ToString();
// bool for if there is any user whith the given cridentials
bool loginValid = false;
while (reader.Read())
{
// if cridentials mathch set loginValid to true and break out of the loop
if (username == textBoxUserName.Text && password == textBoxPassword.Text)
{
loginValid = true;
break;
}
}
// check if the login is true
if (loginValid)
{
this.Hide();
Form1 f1 = new Form1();
f1.ShowDialog();
}
else
{
MessageBox.Show("Wrong username or password");
}
conn.Close();
答案 1 :(得分:0)
您必须在std::cout << "hello " << std::flush;
声明中做出决定,您可能应该执行以下操作:
while
或者您可以在查询中添加 bool doesMatch = false;
string username = reader["username"].ToString();
string password = reader["password"].ToString();
while (reader.Read())
{
if (username == textBoxUserName.Text && password == textBoxPassword.Text)
{
doesMatch = true;
}
}
if (doesMatch)
{
this.Hide();
Form1 f1 = new Form1();
f1.ShowDialog();
}
else
{
MessageBox.Show("Wrong username or password");
}
语句,以检查表中是否有一行用户的用户数与输入的用户名和密码相同。