Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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# 如何在asp.net web表单中为ms sql编写包含多个筛选器输入的搜索查询_C#_Asp.net_Sql_Sql Server - Fatal编程技术网

C# 如何在asp.net web表单中为ms sql编写包含多个筛选器输入的搜索查询

C# 如何在asp.net web表单中为ms sql编写包含多个筛选器输入的搜索查询,c#,asp.net,sql,sql-server,C#,Asp.net,Sql,Sql Server,我需要为高级搜索表单编写一个SQL查询,如下图所示 我编写了这个部分sql查询,但我无法使它正常工作,因为如果用户选中第二个复选框并离开第一个复选框,它也会出现语法错误 strSql = "SELECT ArticleID, ArticleTitle, ArticleDesc, ArticlePublishDate FROM art_Articles WHERE "; strSql += "( ArticleVisible = 1 AND ArticleActive =1 AND Languag

我需要为高级搜索表单编写一个SQL查询,如下图所示

我编写了这个部分sql查询,但我无法使它正常工作,因为如果用户选中第二个复选框并离开第一个复选框,它也会出现语法错误

strSql = "SELECT ArticleID, ArticleTitle, ArticleDesc, ArticlePublishDate FROM art_Articles WHERE ";
strSql += "( ArticleVisible = 1 AND ArticleActive =1 AND LanguageID =" + LangID +" )";
strSql += " AND ";
strSql += " ( ";

if (cbArchiveTitle.Checked)
{ strSql += "  ArticleTitle LIKE N'%" + search + "%'  "; }
if (cbArchiveDesc.Checked)
{ strSql += " OR ArticleDesc LIKE N'%" + search + "%'  "; }
if (cbArchiveSummary.Checked)
{ strSql += " OR ArticleBodyDesc LIKE N'%" + search + "%'  "; }

strSql += ")";
如果我设计这样的查询

 SELECT ArticleID, ArticleTitle, ArticleDesc, ArticlePublishDate FROM art_Articles WHERE 
 ( ArticleVisible = 1 AND ArticleActive =1 AND LanguageID =1 ) AND  
 (   ArticleTitle LIKE N'%Jobs%'   OR ArticleDesc LIKE N'%%'  ) 
并将空值传递给未选中的字段,然后我得到所有选中的行


如果您能帮助我设计此查询,使其适用于如图所示的表单,我将不胜感激。

您可以在代码中添加一些小技巧,以解决“未选中第一个”复选框的问题:

strSql = "SELECT ArticleID, ArticleTitle, ArticleDesc, ArticlePublishDate FROM 

art_Articles WHERE ";
strSql += "( ArticleVisible = 1 AND ArticleActive =1 AND LanguageID =" + LangID +" )";
strSql += " AND ";
strSql += " ( 0 = 1 ";

if (cbArchiveTitle.Checked)
{ strSql += " OR ArticleTitle LIKE N'%" + search + "%'  "; }
if (cbArchiveDesc.Checked)
{ strSql += " OR ArticleDesc LIKE N'%" + search + "%'  "; }
if (cbArchiveSummary.Checked)
{ strSql += " OR ArticleBodyDesc LIKE N'%" + search + "%'  "; }

strSql += ")";

但一般来说,用这种方式编写SQL语句并不是一种好方法。您可以考虑使用类似于或至少一些查询生成器(如

< p>)的技术,您可以向代码添加一些小技巧以解决未选中的第一个复选框:

strSql = "SELECT ArticleID, ArticleTitle, ArticleDesc, ArticlePublishDate FROM 

art_Articles WHERE ";
strSql += "( ArticleVisible = 1 AND ArticleActive =1 AND LanguageID =" + LangID +" )";
strSql += " AND ";
strSql += " ( 0 = 1 ";

if (cbArchiveTitle.Checked)
{ strSql += " OR ArticleTitle LIKE N'%" + search + "%'  "; }
if (cbArchiveDesc.Checked)
{ strSql += " OR ArticleDesc LIKE N'%" + search + "%'  "; }
if (cbArchiveSummary.Checked)
{ strSql += " OR ArticleBodyDesc LIKE N'%" + search + "%'  "; }

strSql += ")";

但一般来说,用这种方式编写SQL语句并不是一种好方法。您可以考虑使用类似于或至少一些查询生成器(如

)的技术,SelectQueryBuilder似乎是一种选择,我也使用了一个小技巧(如果是CBAsQueTest.Cug){StRSQL + =“像N'%%的文章标题+搜索+“%”);} {StRSQL + =“ArticleTitle不象N%%”;}SelectQueryBuilder似乎是一个选项,我也使用了一个小技巧,如果(cbArchiveTitle.Checked){strSql+=“ArticleTitle象N%%”+“search+%”;}或者{strSql+=“ArticleTitle不象N%%”;}