与简单的布尔 WHERE 子句作斗争



疲惫的大脑 - 也许你可以提供帮助。
我的表有两个位字段:
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}

也:

  1. SQL Server 没有Boolean数据类型,它最接近的选项是bit数据类型。

  2. 大括号的使用建议使用字符串串联来构建where子句。当您处理复选框时,这可能没什么大不了的,但在处理自由文本输入时存在安全风险,因为它是SQL注入攻击的大门。最好尽可能使用参数。

相关内容

  • 没有找到相关文章

最新更新