#c# #mysql #database
#c# #mysql #База данных
Вопрос:
Я пытаюсь найти способ выбрать значение в ComboBox, которое затем будет использоваться для команды and mysql.
Я новичок в кодировании на c #, поэтому я получил подсказку, где должна быть моя ошибка .. искал несколько часов и ничего не нашел.
Предполагается, что он используется в качестве фильтра для поиска в огромном стеке данных о клиентах, чтобы, например, показывать только клиентов, живущих в Берлине, или работающих как…
if (checkBoxrecruitingsearch2.Checked)
{
MySqlCommand cmddtschichten = conn.CreateCommand();
cmddtschichten.CommandType = CommandType.Text;
cmddtschichten.CommandText = "SELECT id, Wohnort, Berufsbezeichnung FROM bewerber WHERE '" comboBoxrecruitingfilter.Text "' = '" textBoxrecruitingsearch.Text "' and '" comboBoxrecruitingsearch2.Text "' = '" textBoxrecruitingsearch2.Text "'";
cmddtschichten.ExecuteNonQuery();
DataTable dtschichten = new DataTable();
MySqlDataAdapter cmddaschichten = new MySqlDataAdapter(cmddtschichten);
cmddaschichten.Fill(dtschichten);
dtschichten.Columns["id"].ColumnName = "Bewerber ID";
dtschichten.Columns["Wohnort"].ColumnName = "Wohnort";
dtschichten.Columns["Berufsbezeichnung"].ColumnName = "Berufsbezeichnung";
BindingSource bSourceschichten = new BindingSource();
bSourceschichten.DataSource = dtschichten;
dataGridViewrecruitingsearchresult.DataSource = bSourceschichten;
cmddaschichten.Update(dtschichten);
}
else
{
MySqlCommand cmddtschichten = conn.CreateCommand();
cmddtschichten.CommandType = CommandType.Text;
cmddtschichten.CommandText = "SELECT id, Wohnort, Berufsbezeichnung FROM bewerber WHERE '" comboBoxrecruitingfilter.Text "' = '" textBoxrecruitingsearch.Text "'";
cmddtschichten.ExecuteNonQuery();
DataTable dtschichten = new DataTable();
MySqlDataAdapter cmddaschichten = new MySqlDataAdapter(cmddtschichten);
cmddaschichten.Fill(dtschichten);
dtschichten.Columns["id"].ColumnName = "Bewerber ID";
dtschichten.Columns["Wohnort"].ColumnName = "Wohnort";
dtschichten.Columns["Berufsbezeichnung"].ColumnName = "Berufsbezeichnung";
BindingSource bSourceschichten = new BindingSource();
bSourceschichten.DataSource = dtschichten;
dataGridViewrecruitingsearchresult.DataSource = bSourceschichten;
cmddaschichten.Update(dtschichten);
}
ожидаемым результатом было бы вернуть все «bewerber», где столбец (выбранный в comboBoxrecruitingfilter) равен textBoxrecuitingsearch
Мне действительно показывают список со всеми записями при выполнении с пустым текстом и со списком, в противном случае он ничего не показывает
Комментарии:
1. Если я правильно помню, в mysql действительно есть определенный разделитель имен столбцов » ` «, но в вашем, где вы используете
" ' "
. Очень похожие, но разные символы…WHERE ' " comboBoxrecruitingfilter.Text " ' = '" textBoxrecruitingsearch.Text " '
. Помечено для закрытия как опечатка2. итак, хм? собираюсь это проверить, спасибо. allready создал многие из тех mysql, которые запрашивают all с помощью ‘ и они, похоже, работают до сих пор
3. да, да, так оно и было. на самом деле я действительно не верил, что это поможет, но это помогло, большое спасибо @bradbury9
4. Кстати, если не всем вашим пользователям доверяют, рассмотрите возможность изменения вашего кода, вы открыты для атак с использованием SQL-инъекций
Ответ №1:
РЕШЕНИЕ
Если я правильно помню, в mysql действительно есть определенный разделитель имен столбцов » ` «, но в вашем, где вы используете » ‘ «. Очень похожие, но разные символы
WHERE ' " comboBoxrecruitingfilter.Text " ' = '" textBoxrecruitingsearch.Text " '
должно быть:
WHERE ` " comboBoxrecruitingfilter.Text " ` = '" textBoxrecruitingsearch.Text " '
В качестве дополнительного примечания, ваш код подвергается SQL-инъекции, если вашим пользователям не доверяют, у вас проблема с безопасностью / его могут взломать. Вместо этого следует перейти к параметризованным запросам.
Ответ №2:
Удалите '
вокруг имени поля в предложении where:
cmddtschichten.CommandText = "SELECT id, Wohnort, Berufsbezeichnung FROM bewerber WHERE " comboBoxrecruitingfilter.Text " = '" textBoxrecruitingsearch.Text "' and " comboBoxrecruitingsearch2.Text " = '" textBoxrecruitingsearch2.Text "'";
и
cmddtschichten.CommandText = "SELECT id, Wohnort, Berufsbezeichnung FROM bewerber WHERE " comboBoxrecruitingfilter.Text " = '" textBoxrecruitingsearch.Text "'";
Если у вас есть пробел между именами полей, вы можете использовать одно из следующих:
cmddtschichten.CommandText = "SELECT id, Wohnort, Berufsbezeichnung FROM bewerber WHERE `" comboBoxrecruitingfilter.Text "` = '" textBoxrecruitingsearch.Text "'";
или
cmddtschichten.CommandText = "SELECT id, Wohnort, Berufsbezeichnung FROM bewerber WHERE [" comboBoxrecruitingfilter.Text "] = '" textBoxrecruitingsearch.Text "'";
Комментарии:
1. Если в значениях combobox есть пробелы, запрос прервется. Лучшим подходом было бы использование разделителя столбцов adecuate.
2. Справедливое возражение. Тогда вы правы. Тогда вы можете использовать «, как вы сказали или
[ ]
. Отредактированный ответ.