在SQL中使用带有LIKE关键字的参数

时间:2009-11-12 12:48:21

标签: c# sql parameters

从我的C#-programm,我访问SQL Server 2008数据库。我有一个带有fulltextindex的表,想要搜索索引条目:

SELECT page_id FROM page_categories WHERE page_title LIKE @title

当'title'没有withespace时,一切都很好,但是当title确实包含withespace时,请求失败。它不会抛出任何错误,但返回的记录集已关闭

command.ChangeParameter("title", title);

using (System.Data.IDataReader reader = command.ExecuteQuery())
{
  while (reader.Read())
    resultSet.Add(reader.GetInt32(0));

  reader.Close();
}

我不能将@title参数括在''中,因为Command-Object会将@title解释为字符串而不是参数。

SELECT page_id FROM page_categories WHERE page_title LIKE '@title'

当title-parameter可以包含空格时,任何人都知道如何使用LIKE请求的参数?

提前致谢, 弗兰克

5 个答案:

答案 0 :(得分:2)

你可以这样做:

SELECT page_id 
FROM page_categories 
WHERE page_title LIKE '%' + @title + '%'

答案 1 :(得分:2)

或者ck的答案,你可以这样做:

command.ChangeParameter("title", "%"+title.Trim()+"%");

答案 2 :(得分:1)

您不使用LIKE搜索freetext索引。您使用CONTAINS或FREETEXT或类似的。

答案 3 :(得分:1)

SELECT page_id 
FROM page_categories 
WHERE page_title LIKE '%' + @title + '%'

%表示一个外部字符,类似于SQL外部更常见的*(任何字符串零个或多个字符串)。

您应该确保在调用代码中通过.Trim()修剪参数。

Here是可能的野人的完整参考。

答案 4 :(得分:0)

我将单引号添加到查询中:

SELECT page_id FROM page_categories WHERE page_title LIKE '' + @title + ''

如果我尝试使用'Contains'(CONTAINS(page_title,''+ @tile +'')),我会收到语法错误。