转帖地址:http://www.cnblogs.com/Daylight/archive/2008/10/08/1306199.html
这个问题也是无意中得知的,原因在于我在模糊查询的时候输入了一个%,谁知将全部结果都查询出来了,想了一下,%既然是通配符,输了个%进去,当然全部查询出来了,避免的办法就是使用ESCAPE。
SQL语句可以写成:
SELECT
*
FROM tableName WHERE colName LIKE
'
%
'
+
input
+
'
%
'
ESCAPE
'
//
'
;
这里假设我们的输入是input,在源程序里,input需要进行处理,
input
=
input.Replace(
"
'
"
,
"
''
"
);
//
将1个单引号替换为2个单引号,防止SQL注入
input = input.Replace( " // " , " " ); // 将反斜杠替换为2个反斜杠
input = input.Replace( " % " , " //% " ); // 将%替换为/%
input = input.Replace( " _ " , " //_ " ); // 将_替换为/_
input = input.Replace( " // " , " " ); // 将反斜杠替换为2个反斜杠
input = input.Replace( " % " , " //% " ); // 将%替换为/%
input = input.Replace( " _ " , " //_ " ); // 将_替换为/_
上面3个替换就是将原字符前面加上反斜杠,这样输入到SQL语句中,ESCAPE '//'的作用就是将反斜杠后面的字符识别成普通字符,而不是通配符,这下在进行模糊查询,输入通配符就不会有错误了。
注意,一定要先替换反斜杠,然后再替换%和_