从我的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请求的参数?
提前致谢, 弗兰克
答案 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 +'')),我会收到语法错误。