C# 如何在asp.net web表单中为ms sql编写包含多个筛选器输入的搜索查询
我需要为高级搜索表单编写一个SQL查询,如下图所示 我编写了这个部分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
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%%”;}