对DataView的RowFilter特殊字符的处理

  在数据进行模糊及时筛选的时候,我喜欢使用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(条件字符串) + "%'";  

 

你可能感兴趣的:(filter)