WHERE comboBox中的列名=值?

问题描述 投票:0回答:2

我试图找出一种方法来选择一个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

当使用空文本和组合框执行时,我会显示一个包含所有条目的列表,否则它什么都不显示

c# mysql database
2个回答
1
投票

如果我没记错的话,mysql确实有一个特定的列名分隔符“`”,但在你使用“'”的地方。非常相似但不同的角色

WHERE ' "+ comboBoxrecruitingfilter.Text +" ' = '" + textBoxrecruitingsearch.Text + " '

应该:

WHERE ` "+ comboBoxrecruitingfilter.Text +" ` = '" + textBoxrecruitingsearch.Text + " '

作为旁注,您的代码受SQL注入的影响,如果您的用户不受信任,则您遇到安全问题/可能被黑客入侵。应改为转向参数化查询。


0
投票

删除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 + "'";
© www.soinside.com 2019 - 2024. All rights reserved.