使用通配符查询访问权限

时间:2011-11-04 05:32:50

标签: c# sql ms-access oledb wildcard

我正在尝试从winforms中的访问2010数据库进行子字符串搜索。

command.Parameters.AddWithValue("@searchTerm", searchTerm);
command.CommandText = "SELECT [OA_Name] FROM [Operating_Authority_Table] WHERE [OA_Name] = [@%searchTerm%]";

我尝试进行完整的字符串搜索并且能够做到这一点,但是当我将术语更改为子字符串时,我无法获得任何成功的搜索。

我是否错误地实现了通配符?

3 个答案:

答案 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)

尝试使用SQL LIKE Operator

 command.CommandText = "SELECT [OA_Name] FROM [Operating_Authority_Table] WHERE [OA_Name] LIKE '%"+ searchTerm +"%'";