传参轻松实现组合查询---机房个人版

       传递参数,在整个系统中应该说是支柱了,利用三层编码,靠实体传递参数来实现这些功能,在机房收费系统中组合查询应该是比较麻烦的一部分吧! 传参轻松实现组合查询---机房个人版_第1张图片

像上图中的选择条件,组合起来的情况多种多样了,假如我一个一个去判断,可以想象情况有很多种,组合关系选择什么,查询条件是什么等等,但是对于每种查询条件都有共有的特性,那就是我们选择条件后都要去数据库进行查询,于是我想把查询条件保存到字符串中,靠传递查询字符串去更改D层内不断变化的查询语句 

而对于字段名字,操作符 组合关系下的选项都是汉字,首先我要先将这些字段转换为相应的对应数据库的字段英文名字 

 

'将选择的中文字符转变成字段名,方便在数据库中查询该信息
    Public Function getFileName(ByVal GFN As String) As String
        Select Case GFN
            Case "卡号"
                Return "C_number"
            Case "上机日期"
                Return "L_onDate"
            Case "上机时间"
                Return "L_onTime"
            Case "机房号"
                Return "L_computer"
            Case "姓名"
                Return "L_name"
            Case "与"
                Return " and "
            Case "或"
                Return " or "
            Case Else
                Return ""
        End Select

    End Function


注释:对于上述代码还需要注意一点那就是and 和or  我在运行时,每次组合关系选择and  或or  都会出错,于是我在and 和or 的前后加了空格就好了,原因是: 我在运行时,or 和and 连接 两个不同的查询条件 在我没有加入空格时,例如我想查两个卡号条件下的内容  查询字符串就会是C_numberandC_number   ,很明显的看出,没有空格时根本无法判断出条件是and ,因此会报错。


将这些字段转换成功后,我是利用组合关系框的选择或者是不选择进行判断的,分为几种情况,同时在不同的情况下判断字段名。操作符。查询内容是否为空  ,然后将获得的查询条件保存到定义好的变量中,进行传递! 这样看似很麻烦的查询也就变的简单了,我们只需要选择,至于选择的内容等不必管也可以查询出来, 我的代码如下:

  Dim b1 As BLL.inquireOnLineState = New BLL.inquireOnLineState '实例化B层查询上机状态的类
        '判断第一行文操作符,字段名,以及输入内容  是否为空
        If comFileName1.Text = "" Then
            MsgBox("请选择要查询的字段名!", , "提示")
            comFileName1.Focus()
            Exit Sub
        End If

        '判断操作符输入是否为空
        If comOperate1.Text = "" Then
            MsgBox("请选择操作符", , "提示")
            comOperate1.Focus()
            Exit Sub
        End If

        '判断查询内容是否为空
        If txtContent1.Text = "" Then
            MsgBox("请输入要查询的内容", , "提示")
            txtContent1.Focus()
            Exit Sub
        End If
        Dim sqlString As String = Nothing  '定义变量用来存放查询语句

        '第二个组合关系为空不为空 下,的情况
        If comRelation2.Text = "" Then
            If comRelation1.Text = "" Then
                sqlString = getFileName(comFileName1.Text) & " " & comOperate1.Text & " '" & txtContent1.Text & "'"
            Else  '不为空时两种情况,第二行为空,不为空
                If comFileName2.Text = "" And comOperate2.Text = "" And txtContent2.Text = "" Then
                    sqlString = getFileName(comFileName1.Text) & "" & comOperate1.Text & "'" & txtContent1.Text & "'"
                Else
                    '检测第二行的字段名不能为空 
                    If comFileName2.Text = "" Then
                        MsgBox("请选择第二行字段名!", , "提示")
                        comFileName2.Focus() '字段获得焦点
                        Exit Sub
                    End If
                    '检测第二行操作符是否选择
                    If comOperate2.Text = "" Then
                        MsgBox("请选择第二行操作符", , "提示")
                        comOperate2.Focus() '获取焦点
                        Exit Sub
                    End If
                    '检测查询的内容是否输入 
                    If txtContent2.Text = "" Then
                        MsgBox("请输入第二行要查询的内容", , "提示")
                        txtContent2.Focus() '获取焦点
                        Exit Sub
                    End If
                    sqlString = getFileName(comFileName1.Text) & " " & comOperate1.Text & "'" & txtContent1.Text & "'" & getFileName(comRelation1.Text) & " " & getFileName(comFileName2.Text) & " " & comOperate2.Text & "'" & txtContent2.Text & "'"
                End If
            End If
        Else
            If comFileName3.Text = "" And comOperate3.Text = "" And txtContent3.Text = "" Then
                '两行条件
                sqlString = getFileName(comFileName1.Text) & " " & comOperate1.Text & "'" & txtContent1.Text & "'" & getFileName(comRelation1.Text) & " " & getFileName(comFileName2.Text) & " " & comOperate2.Text & "'" & txtContent2.Text & "'"

            Else
                '检测第三行的字段名不能为空 
                If comFileName3.Text = "" Then
                    MsgBox("请选择第三行字段名!", , "提示")
                    comFileName3.Focus() '字段获得焦点
                    Exit Sub
                End If
                '检测第3行操作符是否选择
                If comOperate3.Text = "" Then
                    MsgBox("请选择第三行操作符", , "提示")
                    comOperate3.Focus() '获取焦点
                    Exit Sub
                End If
                '检测查询的内容是否输入 
                If txtContent3.Text = "" Then
                    MsgBox("请输入第三行要查询的内容", , "提示")
                    txtContent3.Focus() '获取焦点
                    Exit Sub
                End If
                '三行条件
                sqlString = getFileName(comFileName1.Text) & " " & comOperate1.Text & "'" & txtContent1.Text & "'" & getFileName(comRelation1.Text) & " " & getFileName(comFileName2.Text) & " " & comOperate2.Text & "'" & txtContent2.Text & "'" & getFileName(comRelation2.Text) & " " & getFileName(comFileName3.Text) & "" & comOperate3.Text & "'" & txtContent3.Text & "'"
            End If
        End If
        '定义表来接受B层传递回来的数据
        Dim Utable As DataTable = b1.inquireStateInfo(sqlString)
        '绑定数据到datagridview上
        dgvOnLineInfo.DataSource = Utable
        If dgvOnLineInfo.Rows.Count < 1 Then
            MsgBox("没有您查询的信息!", , "提示")
        End If



此处对之前的代码做了修改,原因在于当我输入卡号的时候还好查询的字符串是C_number=1  我不知道这里怎么没有报错,还能执行,但是当我输入ASUS-PC时程序的错误就出现了,查询字符串传入的是L_computer=ASUS-PC  而错误提示是不存在列名ASUS  由此可以看出我在给字段赋值的时候出现了错误,正常应该是L_computer="ASUS-PC"  因此,我将字符串的格式修改后就没有报错了。  


你可能感兴趣的:(传参轻松实现组合查询---机房个人版)