本帖最后由 liudata126 于 2013-08-03 09:26:39 编辑

解决方案 »

  1.   

    把前面的条件括起来,最后加一个 or name like '%%' 就可以了。
    如果是数字类型,最后加一个or id > 0 or id <= 0。
      

  2.   

    正则表达式可以
    不过可以优化设计,用一棵树来表示
    整个where条件为root 然后各个字段(外层大括号)表示为一级子节点,依次类推
    每个节点可以大致表示
    class Condition
    {
        public string Field;
        public string Expression;  //<>'ann'
        public bool IsField
        {
            get{return this.Filed != null;}
        }
        //IsField为true时,表示为大括号里面的条件(N个并列子条件的组合),否则表示最底层小括号
        public IEnumrable<Condition> Children;
       public enum SqlOperator;  //or and,小括号的逻辑运算
    }
    然后用Linq去操作会方便很多
      

  3.   

    为啥要截取SQL,不能再添加SQP语句时,做判断,不符合的时候就不添加 where 条件
      

  4.   


    SQL才对- -键盘连键了
      

  5.   

    好好地,动态拼成sql语句就可以了,折腾什么“删除”功能呢?人家研究如何在餐厅的厨房里使用各种佐料做出大餐,而你研究如何让餐厅的服务员从顾客的大便里吧当初吃进去的饭菜里的某个佐料再去除,这有意义吗?
      

  6.   

    想当然地去匹配字眼,一看就知道不靠谱。例如 
          field1 between field2 and field3
    然后又进一步
         exists(select * from table where field1 between field2 and field3) as x
    或者进一步放到 inner join、group by等等里边,等等,如果你没有语法分析基础,那么你给出的所谓“分层”概念就是跟语法分析数据结构相差甚远的想当然的解释。
      

  7.   

    这事不好办,要分析SQL中的查询条件,难度是写出一个SQL的100倍,自己惦量
      

  8.   


    哎 我也不想啊 我也觉很不靠谱,关键吧 就是让我实现这么一个功能。那个表单没您说的这么复杂。他就只支持个like 和 or 查询。
      

  9.   

    不会这么复杂 支持简单的sql查询 
    这个表单上的sql 语句不是我拼接的。 说实话让我这么做的那个人 她真心不懂技术。
      

  10.   


    SQL才对- -键盘连键了那部分 不能动 ~~我只能处理拼接好的字符串。
      

  11.   

    根据各种情况动态拼接SQL,最好实例化一个STRINGBUILDER对象,用这个对象的APPEND方法去连接SQL的每一部分。
      

  12.   

    那么要么你就首先肯定对方给出的永远都是比较低级的sql语句,要么你就要基于一个sql语法分析器去设计你的程序。用成事不足败事由于的“词法匹配”思路,只会得到很肤浅的做法而又不能通过丰富的sql语法检验。
      

  13.   

    当你确定对方给出的永远都是比较低级的sql语句,那么你也需要穷举出所有可能性,保证不会有任何变化。
      

  14.   

    我只想说,真操蛋的需求。。
    正如5L所说,并没有从源头解决问题
    如果非要这么去实现,你可以把WHERE之后的字符串进行分段,每段用OR,AND作为标记区分,然后每段里查询对应字符是否存在,如果所有段都有这个字符,就连同WHERE也清除掉