我试图找出一种方法来选择一个comboBox上的值,然后将其用于和mysql命令。
我刚接触c#中的编码,所以我知道我的错误应该在哪里...现在搜索几个小时,什么也没发现。
它应该被用作搜索大量客户数据的过滤器,例如只显示居住在柏林的客户,oder工作...
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”,其中列(在comboBox招募过滤器上选择)等于textBoxrecuitingsearch
当使用空文本和组合框执行时,我会显示一个包含所有条目的列表,否则它什么都不显示
解
如果我没记错的话,mysql确实有一个特定的列名分隔符“`”,但在你使用“'”的地方。非常相似但不同的角色
WHERE ' "+ comboBoxrecruitingfilter.Text +" ' = '" + textBoxrecruitingsearch.Text + " '
应该:
WHERE ` "+ comboBoxrecruitingfilter.Text +" ` = '" + textBoxrecruitingsearch.Text + " '
作为旁注,您的代码受SQL注入的影响,如果您的用户不受信任,则您遇到安全问题/可能被黑客入侵。应改为转向参数化查询。
删除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 + "'";