搜索时如何忽略空文本框?

时间:2018-09-25 18:40:23

标签: c# mysql database insert command

  

你好!我想在mysql中搜索数据时忽略空的文本框。

private void button4_Click(object sender, EventArgs e)
{con.Open(); 


 MySql.Command mycommand (SELECT * FROM table WHERE " +
"Name Like '" + textbox1.Text + "'" +
"Nachname Like '" + textbox2.Text + "'" +
"Alter Like '" + textbox3.Text + "'",


con);
read = mycommand.ExecuteReader();
dt.Load(read);
datagridView.DataSource = dt;
con.Close();}

1 个答案:

答案 0 :(得分:0)

有很多方法可以解决此问题,但是理想情况下,您应该使用参数化查询,而不是搜索值的字符串连接。第二个人说他们正在搜索“ O'reilly”之类的名称,但您的查询已被取消。 (请参阅google中的“鲍比下拉表”)。

但是,由于您使用的是字符串连接,为什么不在构建查询时只检查字段的值是否为空?

或者,使用类似以下内容的参数化查询:

SELECT * 
FROM table 
WHERE (@p1 = '' OR `Name` LIKE @p1) 
  AND (@p2 = '' OR `Nachname` LIKE @p2) 
  AND (@p3 = '' OR `Alter` LIKE @p3)
;

具有这种用法:

mycommand.CommandText = theQueryAbove;
mycommand.Parameters.AddWithValue("@p1", textbox1.Text);
mycommand.Parameters.AddWithValue("@p2", textbox2.Text);
mycommand.Parameters.AddWithValue("@p3", textbox3.Text);
var rdr = mycommand.ExecuteReader();

最好的解决方案可能是基于相关文本框构造一个参数化查询,该查询仅包含相关文本框的参数。 Name LIKE @p1(@p1 = '' OR Name LIKE @p1)更快; MySQL优化器可能会根据@p1值自动简化它,但是它仍然可能损害它优化此类查询的其他方式。