Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在搜索时忽略空文本框?_C#_Mysql_Database_Insert_Command - Fatal编程技术网

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

C# 如何在搜索时忽略空文本框?,c#,mysql,database,insert,command,C#,Mysql,Database,Insert,Command,你好!!我想在mysql中搜索数据时忽略空文本框 有很多方法可以做到这一点,但理想情况下,您应该使用参数化查询,而不是搜索值的字符串串联;第二个人说他们正在搜索像“O'reilly”这样的名字,你的查询就失败了。(参见谷歌的“博比下降表”) 但是,既然您使用的是字符串连接,为什么不在构建查询时检查字段的值是否为空呢 或者,使用如下参数化查询: SELECT * FROM table WHERE (@p1 = '' OR `Name` LIKE @p1) AND (@p2 = '' OR

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


有很多方法可以做到这一点,但理想情况下,您应该使用参数化查询,而不是搜索值的字符串串联;第二个人说他们正在搜索像“O'reilly”这样的名字,你的查询就失败了。(参见谷歌的“博比下降表”)

但是,既然您使用的是字符串连接,为什么不在构建查询时检查字段的值是否为空呢

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

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();

最好的解决方案可能是基于相关文本框构造一个参数化查询,该查询只包含相关文本框的参数<代码>像@p1一样的名称可以比
更快(@p1=''或像@p1一样的名称)
;MySQL优化器可能会根据
@p1
值自动简化查询,但它仍可能损害它可能优化此类查询的其他方式。

假设“忽略”的意思是“匹配任何内容”,那么您需要做的肯定是修剪任何实际存在的空格字符?另外,如果要获得正确的匹配,您不需要对字符串进行%舍入吗?是的,我尝试过,但它与%hello不起作用!我使用了你的代码,但它告诉我连接必须打开。但是写的是con.Open();命令应该使用开放连接创建,可以通过将连接传递到其构造函数中,也可以使用连接的create命令方法。
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();