2016-10-05 5 views
0

こんにちは、私はこのエラーが発生し続けていると私はそれを把握することはできません。データベースツールでクエリを実行したときに動作しますが、Microsoft Webデベロッパーにはありません。'GROUP'の近くで条件が予想されるコンテキストで指定された非ブール型の式

私が手にエラーがある:

条件は、近く「グループ」が期待されているコンテキストで指定された非ブール型の式。

コード:助けを事前に

Session["string"] = "answer ='Male'"; 
Session["count"] = 1; 
myCommandSearch = new SqlCommand("SELECT userId FROM UserAnswer WHERE @SEARCHVARIABLES GROUP by userId HAVING COUNT(*) = @VARIABLECOUNT", myConnection); 
myCommandSearch.Parameters.AddWithValue("@SEARCHVARIABLES", Session["string"]); 
myCommandSearch.Parameters.AddWithValue("@VARIABLECOUNT", Session["count"]); 
SqlDataReader myReaderSearch = myCommandSearch.ExecuteReader(); 

感謝。

+0

印刷私は、どのようなオプションは、私は複数のパラメータを追加する必要がないことを行うことができない場合は、 'WHERE'句 – Madhivanan

+0

の結果を? –

+0

@Prdpにカラム名をパラメータ化することはできませんmyCommandSearch –

答えて

0

あなたはパラメータを理解していません。これはあなたのクエリです:

SELECT userId 
FROM UserAnswer 
WHERE @SEARCHVARIABLES 
GROUP by userId 
HAVING COUNT(*) = @VARIABLECOUNT; 

パラメータリテラル値を置き換えるために使用することができます。彼らは交換するために使用することはできません。

  • 列名
  • 表名
  • データベース
  • 関数名
  • 、一定の

ではない何かだから、@SEARCHVARIABLESは文字列のようです。たとえば、次のようなものだとしましょう:userId IN (1, 2, 3)クエリは次のようになります。

SELECT userId 
FROM UserAnswer 
WHERE 'userId IN (1, 2, 3)' 
GROUP by userId 
HAVING COUNT(*) = @VARIABLECOUNT; 

このコンテキストでは、文字列は使用できません。したがって、エラーが発生しています。

+0

回答ありがとうございます。WHERE句に複数のパラメータを渡したい場合、どのオプションを使用するのですか?同じ列名の「回答」をすべて検索します。例:WHERE answer = 'male'またはanswer = 'house' OR answer = '100'。検索される列に答え、検索される変数は常に動的であり、ユーザーが選択する変数の数に応じて数は常に異なります。 –

+0

ありがとう、私は変数と文字列を一緒に連結し、その後、文字列全体をSqlcommandとして渡すだけで解決した解決策を考え出しました。 –

+0

@ Tony.C。 。 。はい、うーん、それは解決策です。あなたは、クエリを一緒に "munge"する必要があります。 –

関連する問題