登录表格不起作用

时间:2017-05-27 15:49:25

标签: c# login

我有这个登录代码,如果数据库中只有一个用户,但是如果我添加另一个用户,然后使用该帐户登录,则会弹出“错误的用户名或密码”消息,但是当我单击“确定”时,它会重定向我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();
    }

2 个答案:

答案 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"); } 语句,以检查表中是否有一行用户的用户数与输入的用户名和密码相同。