2016-10-05 10 views
0

Привет, ребята, я продолжаю получать эту ошибку, и я не могу понять это. Он работает, когда я запускаю запрос в инструменте базы данных, но не тогда, когда он находится в моем веб-браузере Microsoft.Выражение небулевого типа, указанное в контексте, где ожидается условие, около 'GROUP'

Ошибки я получаю:

выражения не-логического типа, указанный в условиях, когда состояние ожидается, рядом с «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

Печать результата myCommandSearch – Madhivanan

+0

Вы не можете параметризовать имена столбцов в разделе 'Where' –

+0

@Prdp, если я не могу это сделать, то какой параметр мне нужно добавить несколько параметров? –

ответ

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' Или ответ = 'дом' ИЛИ ​​ответ = '100'. Ответ на поиск столбца и поиск переменных всегда динамический, и число всегда отличается в зависимости от того, сколько переменных выбирает пользователь. –

+0

Спасибо, я решил, что решение просто конкатюю переменные и строки вместе, а затем передаю всю строку как Sqlcommand, и это сработало. –

+0

@ Tony.C. , , Да, увы, это решение. Вы должны «выполнить» запрос вместе. –