2017-07-12 4 views
1

を照会するパラメータを追加私はこのクエリ(重要ではありません自体を)持っている:C#&SQL Serverの:

SqlCommand sqlCmd = new SqlCommand("SELECT * FROM Table1 WHERE " + 
"CONTAINS((col1, col2, col3), " + "'\"*m*\"')" + 
"ORDER BY(SELECT null) " + 
"OFFSET(1) ROWS FETCH NEXT(100) ROWS ONLY", conn); 

それが必要としてそれは、指定した列に「M」を持つすべての行を返します。 'm'はアスタリスク(ワイルド文字)のペアの中にあり、次に引用符で囲まれ、アポストロフィであることに注意してください。

私はそれをパラメータ化したい、つまりクエリに任意の文字列を入れたいと思っていました。

私はこれを書いた:

SqlCommand sqlCmd = new SqlCommand("SELECT * FROM Table1 WHERE "+ "CONTAINS((col1, col2, col3), " + "'\"*@searchText*\"')" + 
"ORDER BY(SELECT null) "+ 
"OFFSET(1) ROWS FETCH NEXT(100) ROWS ONLY", conn); 
sqlCmd.Parameters.AddWithValue("@searchText", textToSearch); 

をしかし、その代わりにSqlCommandtextToSearch文字列の内容を置くこと、このコードは@searchText自体を置きます。

私はここで同様の投稿を見てきましたが、動作しませんでした。おそらくアポストロフィと引用符とアスタリスクが書式に含まれているためです。

私は間違っていますか?

このコマンドはどのように指定する必要がありますか?

+0

なぜ '*'に '@ searchText'をラップしていますか?申し訳ありませんが、これが明らかな場合、私はすべてを知っていると主張していません。 – GibralterTop

+0

あなたの文字列に 'CONTAINS((col1、col2、col3)、" "* @ searchText *" ')と言っています。 – GibralterTop

+0

これはどのように動作するのですか、SQL Management Studioでテストしました – user1523271

答えて

2

を。

パラメータの周りの単一引用符を削除し、あなたがそうのように罰金する必要があります:

ユアーズ:

+ "'\"@searchText\"')" + 

正しい:

+ " @searchText)" + 

EDIT

の場合二重引用符を含めたいあなたが探している、あなたがそうのようなSQLで文字列を連結したいと思うものにDのアスタリスク:

+ "'\"*' + @searchText + '*\"')" + 

EDIT2

スティーブの提案@パー:

textToSearch = "'\"*" + textToSearch + "*\"'" 

その後、あなたはこれをはるかに読みやすいSQLとして残すことができます。

+ " @searchText)" + 
+1

おそらく、クエリテキストを複雑にするのではなく、_textToSearch_変数を正しく準備する方が良いでしょう。 – Steve

+0

追加のアポストロフィを追加しましたが、これはエラーです。それらを削除し、引用符とアスタリスクだけを残しておけば、問題は解決しました。皆さん、ありがとうございました! – user1523271

2

あなたは...クエリ内の検索文字列にパラメータを連結するために、このような何か必要があります:あなたは文字列のために予約されている単一引用符の内側に自分のパラメータを囲んでいる

"'\"*' + @searchText + '*\"')" 
+0

編集した回答と同じです。私はテストしなかったので、エラーを出してあなたも修正してください。 – kjh

+0

nvm私の目にあまりにも多くの特殊文字 – GibralterTop

2

パラメータの値を作成し、そのパラメータを使用してください。種類:

SqlCommand sqlCmd = new SqlCommand(@"SELECT * FROM Table1 
    WHERE CONTAINS((col1, col2, col3), @searchText) 
    ORDER BY(SELECT null) 
    OFFSET(1) ROWS FETCH NEXT(100) ROWS ONLY" 
    , conn); 
sqlCmd.Parameters.AddWithValue("@searchText", "\"*"+textToSearch+"*\"");