疲惫的大脑 - 也许你可以提供帮助。
我的表有两个位字段:
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。
第二次尝试(我想我现在已经得到了(:
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}
也:
SQL Server 没有
Boolean
数据类型,它最接近的选项是bit
数据类型。大括号的使用建议使用字符串串联来构建
where
子句。当您处理复选框时,这可能没什么大不了的,但在处理自由文本输入时存在安全风险,因为它是SQL注入攻击的大门。最好尽可能使用参数。