为什么我的SQL语句在使用AND或-Visual Basic时会以这种方式运行
我有一个表格,有两个单选按钮SSOP或SCOP,六个复选框和一个组合框。根据单选按钮的选择,组合框将填充,然后使用复选框进行过滤。可以选择多个复选框 我已经编写了下面的代码,当我选择only复选框时,它工作得非常好,只显示该复选框的SSOP。但当我选中多个复选框时,它会同时显示SSOP和SCOP。好像LIKE语句被忽略了一样。为什么呢 谢谢为什么我的SQL语句在使用AND或-Visual Basic时会以这种方式运行,sql,vb.net,Sql,Vb.net,我有一个表格,有两个单选按钮SSOP或SCOP,六个复选框和一个组合框。根据单选按钮的选择,组合框将填充,然后使用复选框进行过滤。可以选择多个复选框 我已经编写了下面的代码,当我选择only复选框时,它工作得非常好,只显示该复选框的SSOP。但当我选中多个复选框时,它会同时显示SSOP和SCOP。好像LIKE语句被忽略了一样。为什么呢 谢谢 Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles
Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles
btnSearch.Click
SQLa = "SELECT * FROM ARES_Procedure_List WHERE ARES_ID LIKE '%SSOP%' "
Dim strChk As String = ""
Dim chk As CheckBox
Dim strSubsystem As String = ""
Dim listSubsystem As List(Of [String]) = New List(Of String)
For Each ctl As Control In Me.Controls
If TypeOf ctl Is CheckBox Then
chk = DirectCast(ctl, CheckBox)
If chk.Checked = True Then
listSubsystem.Add("Subsystem = '" &
Microsoft.VisualBasic.Mid(chk.Text, 1) & "'")
End If
End If
Next
strSubsystem = [String].Join(" OR ", listSubsystem.ToArray())
Label1.Text = strSubsystem
SQLa = SQLa & "AND " & strSubsystem & ""
MsgBox(SQLa)
CallAccess()
cboSelect.Items.Clear()
Do Until RSa.EOF()
cboSelect.Items.Add(RSa.Fields("ARES_ID").Value)
RSa.MoveNext()
Loop
CloseAccess()
End Sub
强制逻辑运算符的正确求值顺序在或条件的序列周围添加括号
SQLa = SQLa & "AND (" & strSubsystem & ")"
但是,您应该对复选框的状态添加一些控制。如果没有选中任何一个,那么代码将生成一个无效的SQL
if listSubsystem.Count > 0 Then
strSubsystem = [String].Join(" OR ", listSubsystem.ToArray())
Label1.Text = strSubsystem
SQLa = SQLa & "AND (" & strSubsystem & ")"
End If
旁注。检查循环可以用
For Each chk In Me.Controls.OfType(Of CheckBox)
If chk.Checked Then
listSubsystem.Add("Subsystem = '" & Microsoft.VisualBasic.Mid(chk.Text, 1) & "'")
End If
Next
过滤和强制转换直接在OfTypeOf复选框IEnumerable extension中完成。这太完美了!非常感谢你!