zoukankan      html  css  js  c++  java
  • 组合查询——拼接字符串

           首先,什么情况下要用到组合查询呢?总的来说,有两种情况:一是在单个查询中从不同的表返回类似结构的数据;二是对单个表执行多个查询,按单个查询返回数据。在这里,我们说的组合查询是指第二种情况,即要查询的表是固定的,查询条件是不定的并且有多个查询条件。

          从例子来看,


    例如,输入相应的查询条件

    1、教师不等于“0”

    2、机器号等于“yang” 

    两个条件是“与”的关系,我们可以很容易的写出它的sql语句


    select * from T_Worklog_Info  where id <> '0' and computer='yang'


    所以接下来要做的核心就是拼出这条语句。

    在U层,我们把输入的查询条件的信息赋给实体,然后把实体传入B层。


     Dim student As New Login.Model.CmbQueryInfo
            Dim Bquery As New Login.BLL.cmbQueryforBLL
            '定义控件基类
            Dim controlArray(2) As System.Windows.Forms.Control
            Dim table As New DataTable
            Dim i As Integer
    
            controlArray(0) = cmbWord1
            controlArray(1) = cmbOperator1
            controlArray(2) = txtContent1
            '字段名
            student.FileName1 = cmbWord1.Text
            student.FileName2 = cmbWord2.Text
            student.FileName3 = cmbWord3.Text
            '操作符
            student.Operator1 = cmbOperator1.Text
            student.Operator2 = cmbOperator2.Text
            student.Operator3 = cmbOperator3.Text
            '查询内容
            student.QueryContent1 = txtContent1.Text
            student.QueryContent2 = txtContent2.Text
            student.QueryContent3 = txtContent3.Text
            '组合关系
            student.CompositionRelation1 = cmbRelation1.Text
            student.CompositionRelation2 = cmbRelation2.Text
    
            DataGridView1.Rows.Clear()
            '查询
            table = Bquery.cmbQuery(student, "T_Worklog_Info")

    在B层,接收实体之后,开始拼接字符串。

    首先,会用到两个方法。

    ModifyFields方法主要是把“卡号”等中文字符转换为数据库中的字段“cardno”。

        Public Function ModifyFields(student As Login.Model.CmbQueryInfo) As Login.Model.CmbQueryInfo
            Dim str As String
            Select Case student.FileName1
                Case "卡号"
                    str = "cardno"
                Case "学号"
                    str = "studentno"
                Case "姓名"
                    str = "studentname"
                Case "性别"
                    str = "sex"
                Case "系别"
                    str = "apartment"
                Case "年级"
                    str = "grade"
                Case "班级"
                    str = "class"
                Case "上机日期"
                    str = "ondate"
                Case "上机时间"
                    str = "ontime"
                Case "下机日期"
                    str = "offdate"
                Case "下机时间"
                    str = "offtime"
                Case "机房号"
                    str = "computer"
                Case "机器号"
                    str = "computer"
                Case "登录日期"
                    str = "LoginDate"
                Case "登录时间"
                    str = "LoginTime"
                Case "注销日期"
                    str = "LogoutDate"
                Case "注销时间"
                    str = "LogoutTime"
                Case "教师"
                    str = "id"
                Case Else
                    str = ""
            End Select
            student.FileName1 = str
    
            'student.FileName2, student.FileName3类似
    
            Select Case student.CompositionRelation1
                Case "与"
                    str = "and"
                Case "或"
                    str = "or"
                Case Else
                    str = "NO"
            End Select
            student.CompositionRelation1 = str
            Select Case student.CompositionRelation2
                Case "与"
                    str = "and"
                Case "或"
                    str = "or"
                Case Else
                    str = "NO"
            End Select
            student.CompositionRelation2 = str
            Return student
        End Function

    CreateQueryContent方法
     Public Function CreateQueryContent(student As Login.Model.CmbQueryInfo) As Login.Model.CmbQueryInfo
            Dim tempQueryComposition As New Login.Model.CmbQueryInfo
            Try
                tempQueryComposition.QueryContent1 = student.FileName1 + " " + student.Operator1 + "'" + student.QueryContent1 + "'"
                tempQueryComposition.QueryContent2 = student.FileName2 + " " + student.Operator2 + _
                                                  "'" + student.QueryContent2 + "'"
                tempQueryComposition.QueryContent3 = student.FileName3 + " " + student.Operator3 + _
                                                "'" + student.QueryContent3 + "'"
    
                tempQueryComposition.CompositionRelation1 = student.CompositionRelation1
                tempQueryComposition.CompositionRelation2 = student.CompositionRelation2
                Return tempQueryComposition
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Function

    在D层,完成最后的sql语句的拼接。

        Public Function CreateSqlString(student As Login.Model.CmbQueryInfo, tablename As String) As String
            Dim sql As String
    
            Try
                '没有组合关系时
                If student.CompositionRelation1.Trim = "NO" Then
    
                    sql = "select * from " + tablename + " Where" + " " + student.FileName1 + student.Operator1 + "'" + student.QueryContent1 + "'"
                Else
                    '有一个组合关系时
                    sql = "select * from " + tablename + " Where" + " " + student.FileName1 + student.Operator1 + "'" + student.QueryContent1 + "'" + " " + student.CompositionRelation1 + " " + student.FileName2 + student.Operator2 + "'" + student.QueryContent2 + "'"
                End If
                '有两个组合关系时
                If student.CompositionRelation2.Trim <> "NO" Then
                    sql = sql + student.CompositionRelation2 + " " + student.FileName3 + student.Operator3 + "'" + student.QueryContent3 + "'"
                End If
    
                Return sql
            Catch ex As Exception
    
            End Try
        End Function

          拼接完成后,可以放到数据库中检验一下,接下来的问题就容易多了。

    最后的显示结果:


        组合查询,其本质终究还是查询。用拼接字符串的方法理解起来比较容易,但特别容易出错。一不小心sql语句就

    会出错,不过调试起来也挺容易发现错误的。期待大家与我交流其他的查询方法。


  • 相关阅读:
    微信公众号 发送客服消息
    juqery 点击谁获取他的值,赋给input标签
    微信执行退出页面,直接回到微信对话窗口
    微信jssdk上传图片,一张一张的上传 和 一次性传好几张
    juqery 判断所有input 不能为空 判断只能为数字 判断身份证号:18位和15位 判断是否银行卡号
    php foreach
    现在越来越喜欢用ajax传值了,这样能让网站的体验性很好,今天就总结了一下常用的
    有时候不用explode截取字符串了,可以用用substr()
    ztree 文件夹类型的 树状图
    POJ 1065 Wooden Sticks
  • 原文地址:https://www.cnblogs.com/saixing/p/6730334.html
Copyright © 2011-2022 走看看