0

我正在使用 C# OleDB 连接从访问数据库中读取数据。我不想要任何长度小于三个字符的结果。

我当前的代码显示“无效的模式字符串”错误。为什么我会收到此错误,我该如何解决?

string qry = "Select * from Table1 where ((CALLNO not like '') and " + 
             "((CALLNO like '%" + suggestedCallNo + "%') or ('" + suggestedCallNo + "' like '%' & CALLNO & '%')) and " +
             "((Len(CALLNO))>=3))";
OleDbCommand myCommand = new OleDbCommand(qry, myConnection);
OleDbDataReader myReader = myCommand.ExecuteReader();

没有((Len(CALLNO))>=3)此代码可以正常工作。一旦我添加了该行,一旦它执行阅读器,我就会得到一个“无效的模式字符串”异常。

我尝试了几件事:

而不是((Len(CALLNO))>=3)use (CALLNO not like ''),这不会导致任何错误,所以我不会缺少括号。

尝试使用单字符通配符,例如,'_'而不是我使用,这会导致相同的“无效模式字符串”错误。事实上,我发现唯一不会引发错误的是空字符串和完整的通配符。'_ _''_ _ _'((Len(CALLNO))>=3)(CALLNO not like '_')'''%'

我还直接在访问中从查询字符串运行查询,并且我没有收到任何类型的错误。

感谢您提供任何信息,

LMB

4

1 回答 1

1

而不是_,您应该使用?

您可以选择的模式有:

  • * 允许你匹配任意长度的任意字符串(包括零长度)
  • ? 允许您匹配单个字符
  • # 允许您匹配单个数字

http://www.techonthenet.com/access/queries/like.php

所以你应该可以使用LIKE '???%'

编辑:正如大卫指出的那样,它不应该'???*''???%'. 但是,该LEN功能也应该可以工作,所以可能还有其他问题。

于 2011-05-05T15:42:12.250 回答