遇见个很奇怪的问题,上面的错误是执行多条件查找的时候报的错误
sql:
select * from tb_Project_Info where(1!=1 or Project_GroupID = '43' or Project_GroupID = '45' or Project_GroupID = '48' or Project_GroupID = '51' or Project_GroupID = '52' or Project_GroupID = '54' or Project_GroupID = '55' or Project_GroupID = '94' )
出的错误。在应使用条件的上下文(在 'Proj' 附近)中指定了非布尔类型的表达式。
在应使用条件的上下文(在 ')' 附近)中指定了非布尔类型的表达式。但是在执行
select * from tb_Project_Info where(1!=1 or Project_GroupID = '43' or Project_GroupID = '45' or Project_GroupID = '48' or Project_GroupID = '51' or Project_GroupID = '52' or Project_GroupID = '54' or Project_GroupID = '55')
的时候可以的。
  页面上是一个CheckBoxList。根据数据库中的数据生成的复选框。我是根据选中的值进行查询。请遇见过这样的情况的高手们帮帮们。

解决方案 »

  1.   

    可以告诉楼主 像这样的语句可以这样写select * from tb_Project_info where 1!=1 or Prodject_GroupID in(43,45,67)
      

  2.   

    用in不行吗? select * from tb_Project_Info where  Project_GroupID in(‘43’,‘45’)
      

  3.   

    两位大侠,我也知道是可以这样子的写的,但是请看清楚了。sql语句不是写死的。是根据选中的复选框生成的sql语句。使用In我也考虑了。但是没有思路。如果这个样子可以的。请给个思路,纠结死我了
      

  4.   

    要沉了。怎么都没人来帮忙呀。对了。忘记说了。刚刚我将sql写死了。使用In方法,还是报着一样的错误。纠结呀~纠结呀~纠结呀~纠结呀~纠结呀~纠结呀~纠结呀~纠结呀~纠结呀~纠结呀~纠结呀~纠结呀~纠结呀~纠结呀~
      

  5.   

     StringBuilder sb = new StringBuilder();
     sb.AppendFormat("1!=1");
        foreach (ListItem i1 in CheckBoxList1.Items)
                 {
                     if (i1.Selected == true)
                     {
                         sb1.AppendFormat(" or Project_GroupID = '{0}'", i1.Value);
                     }             }
    这是我生成sql的方法,大哥,大姐,大爷,大妈们,求求各位帮忙了。
      

  6.   

    如下是js得到一个数组,注意给这个checkbox赋name=chk,而value则赋你需要的ID/*读取选中项ID数组*/
    function getChecked() {
        var IDList = new Array();
        var chk = document.getElementsByName("chk");
        for (var i = 0; i < chk.length; i++) {
            if (chk[i].checked)
                IDList.push(chk[i].value);
        }    return IDList;
    }
    ---
    这个主要用于异步传过去。如果你是在后台直接获取,那么同理很好获取。for (int i = 0; i < Grid1.Items.Count; i++)
                {
                    CheckBox cb = (CheckBox)Grid1.Items[i].Cells[1].FindControl("checkbox1");
                    if (cb.Checked)
                    {
                        //组成字符串
                    }
                }
      

  7.   

    能不能说下。为什么我上面的就不行呢,以下的两条sql语句都在sql 2005中运行可以的。也可以查出数据出来。
    select * from tb_Project_Info where(1!=1 or Project_GroupID = '43' or Project_GroupID = '45' or Project_GroupID = '48' or Project_GroupID = '51' or Project_GroupID = '52' or Project_GroupID = '54' or Project_GroupID = '55')
    在代码中可以运行的。页面Gridview中也能取到值
    select * from tb_Project_Info where(1!=1 or Project_GroupID = '43' or Project_GroupID = '45' or Project_GroupID = '48' or Project_GroupID = '51' or Project_GroupID = '52' or Project_GroupID = '54' or Project_GroupID = '55' or Project_GroupID = '94' ) 
    只是多了一个OR Project_GroupID = '94',就报错了。
      

  8.   

    从你给出的Sql来看貌似语法问题都没有,你捕获的是运行时的Sql语句吗?
      

  9.   

    嗯。是的呀。这个sql语句是在页面选择了checkBoxList的复选框后,得到的语句。并不是写死的。我一直在想使用In的sql,将In写死了。确实不会出错的。但是没有思路,希望各位能给个思路也行呀。奇怪的是。第一条语句可以得到数据。但是第二条语句确报错,我想知道这是为什么的。奇怪的让人莫名其妙
      

  10.   

    提醒lz细心一点儿
    select * from tb_Project_Info where(1!=1 or Project_GroupID = '43' or Project_GroupID = '45' or Project_GroupID = '48' or Project_GroupID = '51' or Project_GroupID = '52' or Project_GroupID = '54' or Project_GroupID = '55' or Project_GroupID = '94' ) 
     注意你最后闭合的那个),用的是中文的另外,这种情况还是用in要好一些。
    string str = "select * from tb_Project_Info where(1!=1 or Project_GroupID in ("+strValue+")"
     strValue 就是你勾选的值,如:strValue = "44,45"