2011-11-04 4 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オペレータに伴う問題は、Accessデータベースエンジン(ACE、ジェットは、どのような)ANSI Query Modeいわゆるに応じて異なるワイルドカード文字を使用することです。おそらくあなたはSqlOleDbを使用することによってANSI-92クエリモードを使用しています(しかし、あなたは確かに分かっていますか?)

ALIKEの利点は、ANSIクエリモード複数の文字の場合は%、1文字の場合は_です。

関連する問題