Вставка «NULL» или «NOT NULL» в параметризованные запросы ASP.NET - PullRequest
1 голос
/ 27 июня 2019

У меня есть asp DropDownList, который используется для фильтрации результатов базы данных. Один из моих фильтров используется для проверки, является ли столбец NULL или NOT NULL:

<asp:DropDownList runat="server" id="activeFilter" CssClass="form-control"  AutoPostBack="false" >
  <asp:ListItem selected="True" value="">-- Filter By Active/Inactive </asp:ListItem>
  <asp:ListItem value="NOT NULL">Active</asp:ListItem>
  <asp:ListItem value="NULL">Inactive</asp:ListItem>
</asp:DropDownList>

Затем я пытаюсь вставить его в параметризованный запрос следующим образом:

//called from another method

string query = ".... AND Status=@statusFilter ...."
SqlConnection conn = new SqlConnection(connString)
SqlCommand command = new SqlCommand(query, conn)
command.Parameters.AddWithValue("@statusFilter", statusFilter.SelectedValue);

//other stuff, make sql call

Этот процесс работает для других значений фильтра, например,

"... AND Name=@nameFilter ..."

Где nameFilter может быть "Джон", "Тим", "Эми" и т. Д., Поэтому я предполагаю, что это как-то связано с тем фактом, что NULL и NOT NULL на самом деле не должны быть строками. Любое простое решение для этого? Я вижу, что могу добавить DBNull.Value, но как насчет NOT NULL?

Любая помощь будет высоко ценится.

EDIT: Извините всех, я допустил ошибку в своем первом посте - я скопировал неверную строку запроса. Моя строка запроса на самом деле

"... AND Date_Completed IS @activeFilter ..." 

Я знаю, что не могу сказать, Колонка = Ноль, поэтому я снова прошу прощения. Я собираюсь просмотреть предложения прямо сейчас и обновить всех.

РЕДАКТИРОВАТЬ 2: Итак, проблема в том, что вы не можете рассматривать NULL / NOT NULL как параметры. Я надеялся, что смогу использовать его в качестве параметра, поскольку у меня было несколько вспомогательных функций для генерации окончательного запроса на основе множества различных фильтров. В конечном счете, это не сработало, и мне нужно было изменить мои методы и напрямую вставить "IS NULL" или "IS NOT NULL", используя блок If / Else.

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Это не сработает, как все говорят в комментариях. Вы можете сделать If, чтобы увидеть выбранное значение, и в запросе sql вы можете использовать IS NULL или IS NOT NULL. Примерно так:

if (statusFilter.SelectedValue == "NULL"){
   string query = ".... AND Status IS NULL...."
}
else{
   string query = ".... AND Status IS NOT NULL...."
}
0 голосов
/ 27 июня 2019

В SQL вы не можете сделать = null, и вы не можете параметризовать is null или is not null.

Это, однако, не означает, что это не может быть решено - что-то вродеэто сделает свое дело:

...AND (Status = @Status OR 
    (Status IS NULL OR @Active = 'NULL') OR 
    (Status IS NOT NULL AND @Active = 'NOT NULL') 
)...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...