精于工作、勤于思考

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

  在数据进行模糊及时筛选的时候,我喜欢使用DataView。DataView的RowFilter属性能帮助我像SQL里面一样进行模糊查询。而我想说的是这些条件字符串里面针对特殊字符的处理。在SQL语句里面,如果插入、修改某条记录可能在哪个字段出现特殊字符,我一般会使用参数化SQL语句,如UPDATE tableName SET [Code] = @Code WHERE ...,在使用LIKE关键字时如果碰到特殊字符如‘’’,要多加一个‘’’等,都是有很好的解决方案。在RowFilter里面,如果

 

dv.RowFilter = "[Code] like '%条件字符串%'";  

如果条件字符串里面出现特殊字符该怎么处理呢?当然也有解决办法,在网上Google了一些,基本上在DataView的RowFilter里面的特殊字符要用"[]"括起来,单引号要换成"''"。它的表达式里面没有通配符的说法,而特殊字符包含:"[","]","%","*","'"。为了避免"[","]"出现的问题,我的解决办法如下: 

        /// <summary>
        /// 处理DataRow筛选条件的特殊字符
        /// </summary>
        /// <param name="rowFilter">行筛选条件表达式</param>
        /// <returns></returns>
        public static string DvRowFilter(string rowFilter)
        {
            //在DataView的RowFilter里面的特殊字符要用"[]"括起来,单引号要换成"''",他的表达式里面没有通配符的说法
            return rowFilter.Replace("[", "[[ ")
                .Replace("]", " ]]")
                .Replace("*", "[*]")
                .Replace("%", "[%]")
                .Replace("[[ ", "[[]")
                .Replace(" ]]", "[]]")
                .Replace("\'", "''");
        }

这样,再赋值RowFilter的时候就是这样了:

dv.RowFilter = "[Code] like '%" + ExString.DvRowFilter(条件字符串) + "%'";  

 

posted on 2010-07-28 10:14  whinsh  阅读(2109)  评论(0编辑  收藏  举报