2011-11-04 86 views
0

我想从winforms中的访问2010数据库中进行子字符串搜索。使用通配符查询访问

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

我试图做一个完整的字符串搜索,能做到这一点,但是当我改变项是一个子,我不能得到任何成功的搜索。

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

回答

4

尝试是这样的:

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

嗯这个工程!谢谢! – user776914

+0

如果它可以随意标记为答案=) –

+0

btw给可能有类似问题的人,我试过并发现'%'有效,'*'不起作用。 – user776914

1

尝试使用SQL LIKE Operator

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

我已经使用了=和LIKE,并为我工作,当我试图做完整的字符串匹配。 – user776914

1

接受的答案:

"...WHERE [OA_Name] = '%' + @searchTerm + '%'"; 

这将%字符当作文本文字。

我有些吃惊,因为问题标题中的“通配符”一词表明模式匹配的意图。如果情况确实如此,我建议用ALIKE运营商替代=等号运营商。

"...WHERE [OA_Name] ALIKE '%' + @searchTerm + '%'"; 

LIKE运营商的问题是,Jet数据库引擎(ACE,李连杰,等等)使用不同的通配符取决于所谓ANSI Query Mode。假设您使用ANSI-92查询模式,暗示使用SqlOleDb(但您肯定知道吗?)

ALIKE的优点是,无论ANSI查询模式如何,它都使用相同的“标准”通配符多个字符为%,单个字符为_