0

C# OleDB 接続を使用してアクセス データベースから読み取っています。長さが 3 文字未満の結果は必要ありません。

現在のコードで「無効なパターン文字列」エラーが表示されます。なぜこのエラーが発生するのですか?どうすれば修正できますか?

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

の代わりに_、次を使用する必要があります?

選択できるパターンは次のとおりです。

  • * 任意の長さの任意の文字列に一致させることができます (ゼロの長さを含む)
  • ? 単一の文字で一致させることができます
  • # 1 桁の数字で一致させることができます

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

だからあなたは使うことができるはずですLIKE '???%'

編集: デビッドが指摘したように、そうではあり'???*'ません'???%'。ただし、LEN機能も動作するはずなので、おそらく別の問題があります。

于 2011-05-05T15:42:12.250 に答える