如何防止组合查询的组合爆炸?有八种条件这些条件可以任意组合,1可以和2,3,4,8组合  2也可以跟1,4,6组合.....总之就是N种组合怎么写代码可以解决这个问题?(怎么拼接SQL语句)

解决方案 »

  1.   


            if (Checkbox1.Checked == true)
            {
                if (drp.SelectedValue.Equals("0"))
                {
                    sbuilder.Append("  and  id in (select a.folderid from  document as a ,tblsource" + keynum + " as d where a.id=d.dossierid) ");
                }
                else
                {
                    sbuilder.Append("  and  id not in (select a.folderid from  document as a ,tblsource" + keynum + " as d where a.id=d.dossierid) ");            }
            }
            else
            {
          sbuilder.Append("  and  id in (select a.folderid from  document as a ,tblsource" +keynum + " as d where a.id=d.dossierid");
              
                if (Checkbox2.Checked == true)
                {
                    sbuilder.Append(" and  charindex('"+strName.Text+"',d.name)>0  ");
                }
                if (Checkbox3.Checked == true)
                {
                    sbuilder.Append(" and  charindex('" + strNumber.Text + "',d.number)>0  ");
                }
                if (Checkbox4.Checked == true)
                {
                    sbuilder.Append(" and  charindex('" + strFname.Text + "',d.fname)>0  ");
                }
                if (Checkbox5.Checked == true)
                {
                    sbuilder.Append(" and  charindex('" + strFtype.Text + "',d.ftype)>0  ");
                }
                if (Checkbox6.Checked == true)
                {
                    sbuilder.Append(" and d.fsize = " + Convert.ToInt32(strFsize.Text)   );
                }
                if (Checkbox7.Checked == true)
                {
                    sbuilder.Append(" and  d.version = " + Convert.ToInt32(strVersion.Text)   );
                }
                if (Checkbox8.Checked == true)
                {
                    sbuilder.Append(" and  charindex('" + strMemo.Text + "',d.memo)>0  ");
                }                sbuilder.Append(")");
            }
      

  2.   

    string sql = "select {0} from table";//根据选择的条件规则得到需查询的字段
    sql = string.Format(sql,字段);