2012-06-06 49 views
1

我有以下WHERE条件在SELECT语句:逃逸用户输入参数

WHERE ('.' + column_name LIKE @prefix)) 

@prefix参数被设置如下:

cmd.Parameters.AddWithValue("@prefix", "%[^a-z]" & prefix & "%") 

prefix变量从形式取输入。

我遇到的问题是当用户输入'%'或'['或其他特殊字符。我怎样才能确保这些逃脱而不是被视为特殊字符?

相关:一般来说,您如何阻止人们在输入中输入'%'并将其视为通配符?

+0

可能的重复[如何清理SQL Server中的动态SQL - 防止SQL注入](http://stackoverflow.com/questions/4102387/how-to-cleanse-dynamic-sql-in-sql-server-预防-Sql注入) –

+0

@PreetSangha我认为这个问题范围较窄,因为它要求在'LIKE'表达式中转义元字符。 – dasblinkenlight

回答

2

SQL's LIKE operator提供了一个可选ESCAPE条款:

match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ] 

您可以将转义字符设置为您喜欢的一个字符,并用它逃离的元字符。

+0

你能给我举个例子吗? – Flash

+0

@Andrew您可以使用'Regex.Replace(prefix,“[〜%_ [\\]]”,“!$ 0”)'用您的感叹号'!'转义您的前缀,然后在您的感叹号escape子句:'column_name LIKE @prefix ESCAPE'!''。 – dasblinkenlight

+0

谢谢。我已更改为'prefix = Regex.Replace(prefix,“[!〜%_ [\]]”,“!$ 0”)'。我收集'!'需要被转义,因为它是转义字符。另外,你为什么包括'〜'? – Flash