Оператор SQL для невыбранных полей - PullRequest
3 голосов
/ 24 февраля 2012

У меня есть несколько выпадающих списков, которые позволяют пользователю выбирать значения.Пользователь также может оставить некоторые невыполненными выпадающие списки.

Я пытаюсь создать оператор SQL, который бы отображал все результаты, даже если выпадающие списки не использовались.Я пробовал следующее, но результаты не возвращаются:

string field1 = null;
string field2 = null;

using (SqlCommand command = new SqlCommand("SELECT * FROM Table WHERE ((@Field1 is null) OR (Field1=@Field1)) AND ((@Field2 is null) OR (Field2=@Field2))", connection))
    {
           command.Parameters.Add(new SqlParameter("@Field1", field1));
           command.Parameters.Add(new SqlParameter("@Field2", field2));
    }

Может кто-нибудь предложить какие-либо идеи?У меня слишком много выпадающих списков, чтобы сделать оператор SQL для каждой невыбранной комбинации.

РЕДАКТИРОВАТЬ:

Чтобы уточнить, значения 'Field1' и 'Field2' могутполучить из выпадающего списка.Тем не менее, пользователь не может выбрать один, если он хочет.Таким образом, я хотел бы удовлетворить оператор SQL для общего случая, когда, если пользователь ничего не выбирает, вместо этого будут отображаться все результаты.Этого можно достичь, написав

WHERE Gender = Gender

в SQL Server, но результаты не возвращаются при выполнении через C #.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Ваш запрос должен выглядеть примерно так:

SELECT * FROM Table WHERE ( (@Field1 is null) or (Field1=@Field1)) AND ((@Field2 is null) or (Field2=@Field2))

Не забудьте передать значение NULL для тех параметров, где ничего не было выбрано ...

0 голосов
/ 24 февраля 2012
       command.Parameters.Add(new SqlParameter("@Field1", field1));
       command.Parameters.Add(new SqlParameter("@Field2", field2));

Для параметров SQL Server вам необходимо иметь знак "@" перед именем параметра при их добавлении.См. Выше исправленный код.

Редактировать : похоже, что из вашего отредактированного вопроса ваш запрос попадания в базу данных может быть немного отклонен.Если вы задаете необязательные параметры, вы должны быть утомлены, когда добавляете их в свой запрос.Это, вероятно, больше похоже на то, что вы хотите:

select *
from yourtable
where
    ((@Field1 is null) or (Field1 = @Field1)) and
    ((@Field2 is null) or (Field2 = @Field2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...