如何?参数和LIKE语句SQL

时间:2008-10-30 18:42:06

标签: asp.net sql vb.net

我正在编写搜索功能,并使用参数来考虑此查询以防止或至少限制SQL注入攻击。但是,当我通过我的程序运行它时,它不会返回任何内容:

SELECT * FROM compliance_corner WHERE (body LIKE '%@query%') OR (title LIKE '%@query%')

可以像这样使用参数吗?或者它们仅在以下实例中有效:

SELECT * FROM compliance_corner WHERE body LIKE '%<string>%'(其中<string>是搜索对象)。

编辑:我用VB.NET构建这个函数,这对你们贡献的语法有影响吗?

另外,我在SQL Server中运行了这个语句:SELECT * FROM compliance_corner WHERE (body LIKE '%max%') OR (title LIKE%max%')`并返回结果。

6 个答案:

答案 0 :(得分:108)

好吧,我会选择:

 Dim cmd as New SqlCommand(
 "SELECT * FROM compliance_corner"_
  + " WHERE (body LIKE @query )"_ 
  + " OR (title LIKE @query)")

 cmd.Parameters.Add("@query", "%" +searchString +"%")

答案 1 :(得分:76)

您的可视基本代码看起来像这样:

Dim cmd as New SqlCommand("SELECT * FROM compliance_corner WHERE (body LIKE '%' + @query + '%') OR (title LIKE '%' + @query + '%')")

cmd.Parameters.Add("@query", searchString)

答案 2 :(得分:25)

你必须这样做:

LIKE '%' + @param + '%'

答案 3 :(得分:1)

您可能必须将%符号与您的参数连接起来,例如:

LIKE'%'|| @query || '%'

编辑: 实际上,这根本没有任何意义。我想我可能误解了你的问题。

答案 4 :(得分:1)

如果从VB执行查询,就像从MS SQL / Access执行查询时,用作占位符%的符号有时不一样。尝试将占位符符号从%更改为*。那可能有用。
但是,如果您调试并希望直接在MS SQL或Access中复制SQL字符串以对其进行测试,则可能必须在MS SQL或Access中将符号更改回%,以便实际返回值。

希望这有帮助

答案 5 :(得分:0)

也尝试这种方式

Dim cmd as New SqlCommand("SELECT * FROM compliance_corner WHERE (body LIKE CONCAT('%',@query,'%')  OR  title LIKE CONCAT('%',@query,'%') )")
cmd.Parameters.Add("@query", searchString)
cmd.ExecuteNonQuery()

使用 Concat 代替 +