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())
读取所有行滚动浏览所有行。
我正在做一个 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())
读取所有行滚动浏览所有行。