После того, как я попытаюсь вывести пароль в dataGrid из заданного имени пользователя в текстовом поле txt_Username, я получаю следующее сообщение об ошибке:
MySql.Data.MySqlClient.MySqlException: "Unknown column 'Test' in 'where clause'"
MySqlDataAdapter da = new MySqlDataAdapter("Select Password from tbl_anmeldedaten Where Username = " + txt_Username.Text, con);
da.SelectCommand.CommandType = CommandType.Text;
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;





Вы используете конкатенацию строк, которая является вектором атак с использованием SQL-инъекций. Возможно, имя пользователя в текстовом поле выполняет какой-то SQL, который ему нельзя разрешать (например, '' OR Test=1. Существует множество ресурсов по использованию параметризованных запросов, которые должны решить проблему.
это комментарий, а не ответ
@ Dr.Snail иногда можно добиться большего, не показывая кода.
см. ответ Тима или stackoverflow.com/help/how-to-answer для получения дополнительной помощи
Точная причина ошибки заключается в том, что вы пытаетесь выполнить следующий запрос:
SELECT Password
FROM tbl_anmeldedaten
WHERE Username = Test;
Похоже, на Test должны быть одинарные кавычки? Да, должен, и вы мог добавляете это в свой необработанный запрос. Но объединение такого запроса в C# оставляет возможность для SQL-инъекции. Намного лучший подход - использовать подготовленные операторы:
string sql = "SELECT Password FROM tbl_anmeldedaten WHERE Username = @val1";
MySqlCommand cmd = new MySqlCommand(sql, MySqlConn.conn);
cmd.Parameters.AddWithValue("@val1", txt_Username.Text);
cmd.Prepare();
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
// consume a record in the result set
}
Также укажите тип напрямую и используйте свойство Value лучше, чем AddWithValue. blogs.msmvps.com/jcoehoorn/blog/2014/05/12/…
@ S.Akbari Это похоже на хорошую ссылку, но я не могу отредактировать свой ответ, не зная точно, какой тип столбца Username находится в реальной таблице.
Используйте параметризованные запросы