MySQL 连接似乎只读取第一个查询

MySQL connection seems to be only reading first query

我正在做一个 C# 项目,直到现在我还没有遇到任何困难,问题是在编写一个简单的登录表单时。

这是它的代码:

    MySqlConnection con = new MySqlConnection();
    MySqlCommand com = new MySqlCommand();

    public LoginForm()
    {
        InitializeComponent();

        con.ConnectionString = @"Data Source=localhost;port=3306;Initial Catalog=databaseName;User id=root;password=''";
    }

    private void button1_Click(object sender, EventArgs e)
    {
        con.Open();

        com.Connection = con;
        com.CommandText = "select * from users";
        MySqlDataReader dr = com.ExecuteReader();
        if (dr.Read())
        {
            if (txtBoxUsername.Text.Equals(dr["username"].ToString()) && txtBoxPassword.Text.Equals(dr["password"].ToString()))
            {
                lblIncorrect.Text = "";
                this.Hide();
                InjectForm f2 = new InjectForm();
                f2.Show();
            }
            else
            {
                lblIncorrect.Text = "Incorrect userename or password.";
                txtBoxPassword.Text = "";
            }
        }
        con.Close();
    }

如您所见,单击按钮将打开我的 MySql 连接和 select 来自 table 用户的所有内容。然后检查在文本框中输入的用户名和密码是否与存储在phpMyAdmin中的用户名和密码匹配。

现在问题来了,如果我使用第一个用户,它会正确登录并执行它应该做的事情,但另一方面,如果我使用第二个用户登录,它会抛出“用户名或密码错误。”文字.

这应该都能正常工作,但实际上没有。

有什么想法吗?

为了优化内存消耗和加速,只需获取所需的记录。当数据变得非常大时,您会注意到执行速度的差异。

button1_Click 更改为:

private void button1_Click(object sender, EventArgs e)
{
     con.Open();

     com.Connection = con;
     com.CommandText = "select * from users where username = @username and password = @password";
     com.Parameters.Add("@username", SqlDbType.VarChar, 50).Value = txtBoxUsername.Text;
     com.Parameters.Add("@password", SqlDbType.VarChar, 50).Value = txtBoxPassword.Text;
     MySqlDataReader dr = com.ExecuteReader();
     if (dr.HasRows)
     {
         while (dr.Read())
         {
             lblIncorrect.Text = "";
             this.Hide();
             InjectForm f2 = new InjectForm();
             f2.Show();
             break;
         }
     }
     else
     {
         lblIncorrect.Text = "Incorrect userename or password.";
         txtBoxPassword.Text = "";
     }
     con.Close();
}

注:使用while(dr.Read())读取所有行滚动浏览所有行。