where子句中的c#mysql未知列

c3frrgcw  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(382)

在我尝试在datagrid中输出密码之后,从 txt_Username textbox,我得到这个错误消息:
mysql.data.mysqlclient.mysqlexception:“where子句”中的未知列“test”

  1. MySqlDataAdapter da = new MySqlDataAdapter("Select Password from tbl_anmeldedaten Where Username=" + txt_Username.Text, con);
  2. da.SelectCommand.CommandType = CommandType.Text;
  3. DataTable dt = new DataTable();
  4. da.Fill(dt);
  5. dataGridView1.DataSource = dt;
hmtdttj4

hmtdttj41#

您使用的是字符串连接,它是sql注入攻击的向量。也许文本字段中的用户名正在执行一些不允许执行的sql操作(例如 '' OR Test=1 . 有很多关于使用参数化查询的资源可以解决这个问题。

rdlzhqv9

rdlzhqv92#

错误的确切原因是您试图执行以下查询:

  1. SELECT Password
  2. FROM tbl_anmeldedaten
  3. WHERE Username = Test;

看起来像吗 Test 应该用单引号括起来吗?是的,应该是这样的,您可以将其添加到原始查询中。但是,在c中连接这样一个查询会为sql注入留下可能性。更好的方法是使用准备好的语句:

  1. string sql = "SELECT Password FROM tbl_anmeldedaten WHERE Username = @val1";
  2. MySqlCommand cmd = new MySqlCommand(sql, MySqlConn.conn);
  3. cmd.Parameters.AddWithValue("@val1", txt_Username.Text);
  4. cmd.Prepare();
  5. MySqlDataReader rdr = cmd.ExecuteReader();
  6. while (rdr.Read())
  7. {
  8. // consume a record in the result set
  9. }

相关问题