我正在尝试从winforms中的访问2010数据库进行子字符串搜索。
command.Parameters.AddWithValue("@searchTerm", searchTerm);
command.CommandText = "SELECT [OA_Name] FROM [Operating_Authority_Table] WHERE [OA_Name] = [@%searchTerm%]";
我尝试进行完整的字符串搜索并且能够做到这一点,但是当我将术语更改为子字符串时,我无法获得任何成功的搜索。
我是否错误地实现了通配符?
答案 0 :(得分:5)
尝试这样的事情:
command.Parameters.AddWithValue("@searchTerm", searchTerm);
command.CommandText = "SELECT [OA_Name] FROM [Operating_Authority_Table] WHERE [OA_Name] = '%' + @searchTerm + '%'";
答案 1 :(得分:2)
接受的答案:
"...WHERE [OA_Name] = '%' + @searchTerm + '%'";
这会将%
个字符视为文字文字。
我有点惊讶,因为问题标题中的“通配符”一词表明其意图是模式匹配。如果确实如此,我建议用=
运算符替换ALIKE
等于运算符,例如
"...WHERE [OA_Name] ALIKE '%' + @searchTerm + '%'";
LIKE
运算符的问题在于Access数据库引擎(ACE,Jet,等等)使用不同的通配符,具体取决于所谓的ANSI Query Mode。大概是你使用ANSI-92查询模式暗示使用SqlOleDb(但你肯定知道吗?)
ALIKE
的优点是,无论ANSI查询模式如何,都使用相同的“标准”通配符,多个字符为%
,单个字符为_
。
答案 2 :(得分:1)
command.CommandText = "SELECT [OA_Name] FROM [Operating_Authority_Table] WHERE [OA_Name] LIKE '%"+ searchTerm +"%'";