机房收费系统个人版——VB.NET组合查询

前端之家收集整理的这篇文章主要介绍了机房收费系统个人版——VB.NET组合查询前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在VB.NET机房收费系统个人版的过程中,又遇到了组合查询了。机房收费系统的组合查询是所有组合查询类型中相对比较繁琐和困难的。当然,在.NET的组合查询中,我用的是拼接字符串。

下面以机房收费系统中“学生基本信息维护”为例,讲一下我是如何实现组合查询


这是“学生基本信息维护”的界面:

我先说一下解决的思路:因为是用三层的思想,所以我们就需要考虑解决方法和各个层应该放什么内容。我 用的方法是拼接字符串,所以首先U层:要在U层里面定义一个函数,实现文本框里面中英文的转换;然后,定义一个字符串,根据组合关系框的不同情况依次拼写字符串——

Public Class FormUI_ProtectStudentInfo
    '退出按钮
    Private Sub btnCancel_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles btnCancel.Click
        FormUI_Main.Show()
        Me.Hide()
    End Sub

    '查询按钮
    Private Sub btnQuery_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles btnQuery.Click
        '清空DataGridView控件的内容
        DataGridView1.DataSource = vbNull

        '字段名不允许为空
        If cmbFieldBox1.Text.Trim() = "" Then
            MessageBox.Show("对不起,字段名不允许为空,请您选择字段名","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)
            Exit Sub
        End If

        '操作符不允许为空
        If cmbOperateBox1.Text.Trim() = "" Then
            MessageBox.Show("对不起,操作符不允许为空,请您选择操作符",MessageBoxIcon.Warning)
            Exit Sub
        End If

        '要查询内容不允许为空
        If txtQueryContent1.Text.Trim() = "" Then
            MessageBox.Show("对不起,请您输入要查询内容,要查询内容不允许为空",MessageBoxIcon.Warning)
            Exit Sub
        End If


        '拼接字符串
        Dim sqlstring As String = Nothing

        '当组合关系框均为空时
        If cmbConbineBox1.Text = "" Then
            sqlstring = GetEnglish(cmbFieldBox1.Text) + cmbOperateBox1.Text + txtQueryContent1.Text

            '当第一个组合关系框为“或”第二个框为空时
        ElseIf cmbConbineBox1.Text = "或" And cmbCombineBox2.Text = "" Then
            sqlstring = GetEnglish(cmbFieldBox1.Text) + cmbOperateBox1.Text + txtQueryContent1.Text Or GetEnglish(cmbFieldBox1.Text) + cmbOperateBox2.Text + txtQueryContent2.Text

            '当第一个组合关系框为“与”第二个框为空时
        ElseIf cmbConbineBox1.Text = "与" And cmbCombineBox2.Text = "" Then
            sqlstring = GetEnglish(cmbFieldBox1.Text) + cmbOperateBox2.Text + txtQueryContent1.Text And GetEnglish(cmbFieldBox1.Text) + cmbOperateBox2.Text + txtQueryContent2.Text

            '当第一个框为“或”,第二个框为“或”时
        ElseIf cmbConbineBox1.Text = "或" And cmbCombineBox2.Text = "或" Then
            sqlstring = GetEnglish(cmbFieldBox1.Text) + cmbOperateBox1.Text + txtQueryContent1.Text Or GetEnglish(cmbFieldBox2.Text) + cmbOperateBox2.Text + txtQueryContent2.Text Or GetEnglish(cmbFieldBox3.Text) + cmdOperateBox3.Text + txtQueryContent3.Text

            '当第一个框为“与”第二个框为“与”时
        ElseIf cmbConbineBox1.Text = "与" And cmbCombineBox2.Text = "与" Then
            sqlstring = GetEnglish(cmbFieldBox1.Text) + cmbOperateBox1.Text + txtQueryContent1.Text And GetEnglish(cmbFieldBox2.Text) + cmbOperateBox2.Text + txtQueryContent2.Text And GetEnglish(cmbFieldBox3.Text) + cmdOperateBox3.Text + txtQueryContent3.Text

            '当第一个框为“或”第二个框为“与”
        ElseIf cmbConbineBox1.Text = "或" And cmbCombineBox2.Text = "与" Then
            sqlstring = GetEnglish(cmbFieldBox1.Text) + cmbOperateBox1.Text + txtQueryContent1.Text Or GetEnglish(cmbFieldBox2.Text) + cmbOperateBox2.Text + txtQueryContent2.Text And GetEnglish(cmbFieldBox3.Text) + cmdOperateBox3.Text + txtQueryContent3.Text

            '当第一个框为“与”第二个框为“或”
        ElseIf cmbConbineBox1.Text = "与" And cmbCombineBox2.Text = "或" Then
            sqlstring = GetEnglish(cmbFieldBox1.Text) + cmbOperateBox1.Text + txtQueryContent1.Text And GetEnglish(cmbFieldBox2.Text) + cmbOperateBox2.Text + txtQueryContent2.Text Or GetEnglish(cmbFieldBox3.Text) + cmdOperateBox3.Text + txtQueryContent3.Text

        End If


        '定义一个B层对象
        Dim uB As New BLL.BLL_ProtectStudentInfo
        Dim a As DataTable
        a = uB.query_st(sqlstring)
        If a.Rows.Count() > 0 Then
            DataGridView1.DataSource = a
        Else
            MessageBox.Show("没有记录",MessageBoxIcon.Information)
        End If
    End Sub

    Public Function GetEnglish(ByVal strControl As String) As String
        Select Case (strControl)
            Case "卡号"
                Return "card_no"
            Case "学号"
                Return "student_id"
            Case "性别"
                Return "st_sex"
            Case "姓名"
                Return "st_name"
            Case "年级"
                Return "st_grade"
            Case "院系"
                Return "st_department"
            Case "班级"
                Return "st_class"
            Case Else
                Return ""
        End Select
    End Function
End Class

以上便是U层的情况,当然B层很简单了,只要定义一个函数,返回D层的查询结果就可以了,记住,在这个过程中,传递的是我们自己定义的拼接的字符串哦

Public Class BLL_ProtectStudentInfo
Public Function query_st(ByVal sqlstring As String) As DataTable
        '定义一个D层对象
        Dim bD As New DAL.DAL_ProtectStudentInfo
        Dim dt As New DataTable
        dt = bD.Query_ST(sqlstring)
        Return dt
    End Function
End Class

D层就是根据所拼接的字符串,一个sql语句便搞定啦

Imports System.Data.sqlClient
Public Class DAL_ProtectStudentInfo
    '数据库连接语句
    Dim str As String = "server=.;database=Computer room Charging System;integrated security=sspi"
    Dim conn As sqlClient.sqlConnection

    '构造函数,建立连接,打开数据库
    Public Sub New()
        conn = New sqlClient.sqlConnection
        conn.ConnectionString = str
        conn.Open()
    End Sub

    '定义一个函数
    Public Function Query_ST(ByVal sqlstring As String) As DataTable
        'sql语句
        Dim sqlstr As String
        sqlstr = "select * from Student where " + sqlstring
        '执行
        Dim myAdapter As sqlDataAdapter = New sqlDataAdapter(sqlstr,conn)
        Dim myTable As New DataTable()
        myAdapter.Fill(myTable)
        Return myTable
    End Function

End Class
原文链接:https://www.f2er.com/vb/258911.html

猜你在找的VB相关文章