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