Борьба с простым логическим предложением WHERE - PullRequest
0 голосов
/ 18 сентября 2019

Усталый мозг - возможно, вы можете помочь.
В моей таблице два битовых поля:
1) TestedByPCL и
2) TestedBySPC.
Оба могут = 1.
Пользовательский интерфейс имеет два соответствующих флажка.В коде я конвертирую чеки в int.

int TestedBySPC = SearchSPC ? 1 : 0;
int TestedByPCL = SearchPCL ? 1 : 0;

Мое предложение WHERE выглядит примерно так:

WHERE TestedByPCL = {TestedByPCL.ToString()} AND TestedBySPC = {TestedBySPC.ToString()} 

Проблема в том, что установлен только один флажок. Я хочувернуть строки с соответствующим полем, установленным в 1, или обоими полями, установленными в 1.
Теперь, когда оба поля установлены в 1, мое предложение WHERE требует, чтобы оба флажка были установлены вместо одного.
Итак, еслиодна галочка помечена как возвращаемая запись с этим полем = 1, независимо от того, является ли другое поле = 1.

1 Ответ

1 голос
/ 18 сентября 2019

Вторая попытка (я думаю, что у меня есть сейчас):

WHERE ((TestedByPCL = {chkTestedByPCL.IsChecked} AND TestedBySPC = {chkTestedBySPC.IsChecked}) 
OR 
(TestedByPCL = 1 AND TestedBySPC = 1 AND 1 IN ({chkTestedByPCL.IsChecked}, {chkTestedBySPC.IsChecked})))

Не правильно понял вопрос. Измените AND на OR:

WHERE TestedByPCL = {chkTestedByPCL.IsChecked} OR TestedBySPC = {chkTestedBySPC.IsChecked}

Также:

  1. SQLСервер не имеет Boolean тип данных , его ближайший вариант - bit тип данных.

  2. Использование фигурных скобок предполагает использование конкатенации строк для построения where пункт.Это может не иметь большого значения, когда вы обрабатываете чекбоксы, но это угроза безопасности при обработке свободного ввода текста, так как это открытая дверь для SQL-инъекций атак.Лучше использовать параметры всякий раз, когда вы можете.

...