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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在搜索时忽略空文本框?相关的知识,希望对你有一定的参考价值。

你好!我想在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();}
答案

有很多方法,但理想情况下,您应该使用参数化查询而不是搜索值的字符串连接;第二个人说他们正在寻找像“O'reilly”这样的名字,你的查询被破坏了。 (请参阅谷歌的“bobby drop tables”)。

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

或者,使用参数化查询,如下所示:

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值自动简化它,但它仍然会影响它可能优化此类查询的其他方式。

以上是关于如何在搜索时忽略空文本框?的主要内容,如果未能解决你的问题,请参考以下文章

从文本字段捕获数据时如何忽略自动完成值?

使用 LINQ-to-Entities 搜索时忽略空字符串

如何让Access 空文本框参与计算时默认是0,如图碳粉为空,计算时自动变0,别用VB代码,VB我会,请用VBA

如何在 JQuery 的文本框中获取空值?

如何在搜索/过滤数据期间处理空字段?

javascript:在用户键入或更改文本框值时忽略无效输入[重复]