VB.NET+三层 机房收费系统之组合查询

关系组合查询已经用去了4天的时间。每天都在痛苦中煎熬,绞尽脑汁,一句代码都要瞪大眼睛看好长时间,有时候。由于两句话颠倒了。就nothing了;有时候,由于table如何可以转换成实体类型。将自己困住了。一想就是半天。状况不断呀。看了非常多师哥师姐们的代码,他们分享着自己的代码。为了给大家一点东西,给拿出自己给大家分享。期望大家能给点意见。

步骤:

(1)、首先建立实体,实体是用来存储变量的。

(2)、建立B层,B层除了有调用D层的函数,同一时候,它也有将汉字转换为sql中的字段的功能。

(3)、建立D层。D层中我调用的是视图,应为我把学生表和卡表分开了(这个不打紧),假设你能够仅仅查询一张表。直接用查询表即可了;假设用的数据不单单在一张表上的时候。能够试试用视图。非常easy的。

(4)、建立U层,U层中主要是检查格式是否正确(主要是有没有空的,在代码中有具体说明。看代码中的凝视就明确了)。

三层设计:

U层设计:

这里我为什么先写U层呢?不应该先写实体(E)层吗?事实上我就是先写的U层。由于我也不知道,我用到了那些实体。它不光光包括了数据库中的表的字段,另一些其它的參数。

U层的界面设计:

U层的代码:

Imports System.Data.SqlClient
Imports System.Windows.Forms
Public Class FrmOperStuInfo

    Private Sub btnQurry_Click(sender As Object, e As EventArgs) Handles btnQurry.Click
        ‘----------------------------------------------------------------
        ‘第一行查询不能为空。党第一行为空的话,后面的条件都不能有内容。
        ‘当第一个组合框不为空是,第二行不能为空。同一时候,假设第一个组合框为空时,第二个组合框不能有内容
        ‘当第二个组合框不为空时。第三行不能为空。

‘-----------------------------------------------------------------

        Dim QueryStudent As New Entity.QueryStudentEntity    ‘这个实体是用来传实体的
        Dim QueryStudentBLL As New BLL.QurryStudentBLL
        Dim controlArray(2) As Control
        Dim table As System.Data.DataTable  ‘接收实体的,但用的不是entity类型的。传回的是datatable,由于dataGirdView用的会比較舒服
        Dim sqlstring As String ‘sql的查询语句
        Dim relation1 As String
        Dim relation2 As String

        Try
            controlArray(0) = combofield1 ‘第一行
            controlArray(1) = Combochar1
            controlArray(2) = TextBox1
            QueryStudent.Field1 = QueryStudentBLL.ChangeField(combofield1.Text)
            sqlstring = "SELECT * FROM V_QueryStudent WHERE " & QueryStudent.Field1 & Combochar1.Text & "‘" & TextBox1.Text & "‘"    ‘当仅仅有第一行有东西的时候

            If CommonFunction.IsSomeEmptyText(controlArray) Then   ‘输入为空
                Exit Sub
            End If

            If Comborela1.Text.Trim <> "" Then    ‘第一个组合框不为空的时候
                controlArray(0) = Combofield2 ‘第二行
                controlArray(1) = Combochar2
                controlArray(2) = TextBox2
                QueryStudent.Field2 = QueryStudentBLL.ChangeField(Combofield2.Text)
                relation1 = QueryStudentBLL.ChangeRelation(Comborela1.Text)
                sqlstring = sqlstring & " " & relation1 & " " & QueryStudent.Field2 & Combochar2.Text & TextBox2.Text    ‘当仅仅有第一行有东西的时候

                If CommonFunction.IsSomeEmptyText(controlArray) Then
                    Exit Sub
                End If

                If Comborela2.Text.Trim <> "" Then ‘第二个组合框不为空的时候。第三行也一定不能为空
                    controlArray(0) = Combofield3 ‘第二行
                    controlArray(1) = Combochar3
                    controlArray(2) = TextBox3
                    QueryStudent.Field3 = QueryStudentBLL.ChangeField(Combofield3.Text)
                    relation2 = QueryStudentBLL.ChangeRelation(Comborela2.Text)
                    sqlstring = sqlstring & " " & relation2 & " " & QueryStudent.Field3 & Combochar3.Text & TextBox3.Text    ‘当仅仅有第一行有东西的时候

                    If CommonFunction.IsSomeEmptyText(controlArray) Then
                        Exit Sub
                    End If
                End If
            Else
                Comborela2.Text = "" ‘第一个组合框为空的时候。第二个组合框一定为空
            End If

            QueryStudent.Field1 = combofield1.Text  ‘往实体中传參用的
            QueryStudent.Field2 = Combofield2.Text
            QueryStudent.Field3 = Combofield3.Text

            QueryStudent.Char1 = Combochar1.Text
            QueryStudent.Char2 = Combochar2.Text
            QueryStudent.Char3 = Combochar3.Text

            QueryStudent.Relation1 = Comborela1.Text
            QueryStudent.Relation2 = Comborela2.Text

            QueryStudent.Content1 = TextBox1.Text
            QueryStudent.Content2 = TextBox2.Text
            QueryStudent.Content3 = TextBox3.Text
            QueryStudent.sqlstring = sqlstring ‘将字符串也要传给它

            table = QueryStudentBLL.QueryStudent(QueryStudent) ‘接收返回值的table类型的

            DataGridView1.DataSource = table ‘绑定

        Catch ex As Exception
            MsgBox(ex.Message)

        End Try

    End Sub

公共函数:

Public Class CommonFunction
    Public Shared Function IsAllEmptyText(ByVal frm As Form) As Boolean
        Dim control As New Control

        For Each control In frm.Controls ‘遍历窗口中全部的控件
            ‘MsgBox(frm.Controls.Count)
            If TypeOf control Is TextBox Then ‘推断控件是不是文本框
                If control.Text.Trim = "" Then ‘推断文本框内容是否为空
                    MsgBox(control.Tag.ToString + "不能为空。", vbOKOnly, "温馨提示")
                    control.Focus()
                    Return True
                    Exit Function
                End If
            ElseIf TypeOf control Is ComboBox Then ‘推断控件是不是组合框
                If control.Text.Trim = "" Then
                    MsgBox(control.Tag.ToString + "不能为空!", vbOKOnly, "温馨提示")
                    Return True
                    Exit Function
                End If
            End If
        Next

        Return False
    End Function

    ‘‘‘ 推断控件数组中的控件的Text属性是否为空,有空时返回true  

    Public Shared Function IsSomeEmptyText(ByVal arrayControl() As Control) As Boolean
        Dim control As New Control

        For Each control In arrayControl ‘遍历数组中全部元素
            If TypeOf control Is TextBox Then ‘推断控件是不是文本框
                If control.Text.Trim = "" Then ‘推断文本框内容是否为空
                    ‘MsgBox(control.Tag.ToString + "不能为空。", vbOKOnly, "温馨提示")
                    MsgBox(control.Tag.ToString + "不能为空!", vbOKOnly, "温馨提示")
                    control.Focus()
                    Return True
                    Exit Function
                End If
            ElseIf TypeOf control Is ComboBox Then ‘推断控件是不是组合框
                If control.Text.Trim = "" Then
                    ‘MsgBox(control.Tag.ToString + "不能为空!", vbOKOnly, "温馨提示")
                    MsgBox("不能为空!

", vbOKOnly, "温馨提示")

                    Return True
                    Exit Function
                End If
            End If
        Next

        Return False
    End Function
End Class

上面是一个窗口,是用来调用B层,以下是一个类。是用来推断格式(是否有本不该为空的控件)通俗的讲。

E层的代码:

Public Class QurryStudentBLL
    Public Function ChangeObject(ByVal qurryStudent As Entity.QueryStudentEntity) As Entity.QueryStudentEntity
        qurryStudent.Field1 = ChangeField(qurryStudent.Field1)
        qurryStudent.Field2 = ChangeField(qurryStudent.Field2)
        qurryStudent.Field3 = ChangeField(qurryStudent.Field3)
        ‘这里的char 是不须要转换的
        qurryStudent.Relation1 = ChangeRelation(qurryStudent.Relation1)
        qurryStudent.Relation2 = ChangeRelation(qurryStudent.Relation2)
        Return qurryStudent
    End Function

    Public Function ChangeField(ByVal strField As String) As String ‘转换字段
        Dim strFields As String = ""
        Select Case strField
            Case "卡号"
                strFields = "CardNo"
            Case "学号"
                strFields = "StudentNO"
            Case "姓名"
                strFields = "StudentName"
            Case "性别"
                strFields = "Sex"
            Case "系别"
                strFields = "Department"
            Case "年级"
                strFields = "Grade"
            Case "班级"
                strFields = "Class"
        End Select
        Return strFields
    End Function

    Public Function ChangeRelation(ByVal strRelation As String) As String ‘转换组合符
        Dim strRelations As String = ""
        Select Case strRelation
            Case "与"
                strRelations = "AND"
            Case "或"
                strRelations = "OR"
            Case ""
                strRelations = ""     ‘这里也能够给它赋一个空值
        End Select
        Return strRelations
    End Function

    Public Function QueryStudent(ByVal QueryStudentBLL As Entity.QueryStudentEntity) As System.Data.DataTable
        Dim queryStudentDAL As New DAL.StudentDAL
        Dim queryStudents As New System.Data.DataTable

        queryStudents = queryStudentDAL.QueryStudent(QueryStudentBLL)
        Return queryStudents

    End Function
End Class

通过U层,就能够知道,B层里面须要转换的字符,以及调用D层的函数。

    Function QueryStudent(ByVal queryStudent1 As Entity.QueryStudentEntity) As System.Data.DataTable
        Dim conn As SqlConnection = New SqlConnection(SqlUtil.connstring())                       ‘定义连接打开数据库,这里也有还有一种方法写
        Dim sql As String
        sql = queryStudent1.sqlstring
        Dim cmd As SqlCommand = New SqlCommand(sql, conn)                              ‘定义数据库命令
        ‘cmd.CommandText = sql        ‘存储过程
        ‘cmd.CommandType = CommandType.Text
        Dim myAdapter As SqlDataAdapter = New SqlDataAdapter(cmd)

        Dim table As DataTable = New DataTable()  ‘要返回的是datatable类型的

        Try
            conn.Open()
            myAdapter.Fill(table)   ‘fill是用来将Adapter查询到的视图,放到table里面

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

        Return table

    End Function
End Class

好的。到了这里就整个都写完了。

注意:

(1)、DataTable这样转换为实体类型?答:不须要一个一个赋值,真的非常麻烦。直接这样就能够了//table = QueryStudentBLL.QueryStudent(QueryStudent) ‘接收返回值的table类型的//.

(2)、假设我在SQL中用来了两个表查询,是不是建立两个实体,两个B层呀?答:不须要,方法1:建立一个实体,将两个表所用到的字段放到里面。方法2:建立一个视图,直接调即可了。

时间: 2024-10-29 03:30:06

VB.NET+三层 机房收费系统之组合查询的相关文章

机房收费系统之—组合查询

在敲组合查询的时候,我遇到了很多问题,比如说查询的语法怎么连接啊,怎么让控件中的文本信息也就是说字段名,组合关系对应数据库表中的字段哪? 也就是说我们要让卡号=Cardno,让姓名=StudentName ,这样我们在查询的时候才方便了,反成不能直接给Combox的text里面上英文的吧? 于是就定义个函数,让它实现这个功能,函数如下. <span style="font-size:18px;">Public Function Field(i As String) As S

机房收费系统 之 组合查询BUG

声明:以下内容只对在学生上机记录查询(组合查询)只查询已下机记录,操作员工作记录(组合查询)只查询已注销记录的同学适用! 说是BUG,其实这也不是一个BUG,只是一个不小心容易犯的错误,而且不注意的话还真发现不了.下面就给大家详细的讲讲: 在机房收费系统中有三个组合查询:学生基本信息查询.学生上机记录查询.操作员工作记录查询:其中的学生上机记录查询,我个人认为应该只查询出已经下机的记录,正在上机的记录不应该被查询出来:操作员工作记录也是同样的. 如果你跟我也是一样的想法,那就接着看看我们的实现方

VB.NET版机房收费系统—DataGridView应用

事实上,先前刚刚開始敲机房的时候,刚用到DataGridView的时候,总显得力不从心,先要一下子就学会,看了非常多的资料,但是依照写的时候,自己有不知道从什么地方下手,于是,当自己用查询SQL语句,并用DataGridView显示出来,这个功能不能实现,但这里给大家写一下,假设有什么地方不好的会,请大家指出: 第一版: 窗口设计: 须要的控件: DateTimePicker.DataSet.DataGridView 把握的三步骤: 第一步:使用视图,创建出你要的产寻结果的视图(假设是一个表就能

vb.net版机房收费系统重构

机房收费系统重构版终于正式开工了! 前几天,刚刚看完三层的视频,在视频中详细的讲解了一个登录功能.天真的我,当时以为三层结构是那么的简单,所以我草草地做完总结之后,就很快就开始机房收费系统的重构了.可是谁想到,当我一打开编程软件,就让我"碰了一鼻子的灰"!首先是不知道vs 怎么用,其次就是看三层的时候,登录的实例使用C#写的,而这次我们需要用VB.NET写,所以对于其中的语法是知之甚少.虽然,前段时间我看了一遍台湾讲师--曹祖胜的<VB.NET 视频>,但是他讲的几乎都是一

VB.NET版机房收费系统---七仙女之系统登录

VB.NET第一版机房收费系统,告一段落,验收的时候,问题也是大大的存在,没有用上设计模式,什么触发器,存储过程,都没有用上,看看其她小伙伴的,七层实现登录?那是什么东东,相比较我的三层而言,多了两倍还加个一,通过查资料,看博客,憋了好几天,终于,憋出了一个七仙女---七层实现系统登录,七个女儿,各司其职,完美配合,衍生出众多美丽的故事. 从三层猛地跳到七层,有种穿越的感觉,说白了就是不会,又是想逃避的感觉,可是人生在世,有的事情不能随着自己的性子来,喜欢了就去做,不喜欢,就不做,没办法,就一直

VB.Net版机房收费系统 ---数据库设计

数据库设计是根据用户需求设计数据库结构的过程,具体来说,数据库设计是对于给定的应用环境,在厝数据库理论的指导下,构造最优的数据库模式,在数据库管理系统上建立数据库及其应用系统,使之能有效地存储数据,满足用户的各种需求的过程.到底数据库该如何设计,古往今来,每个人都有每个人的想法,所以数据库设计并没有优劣之分,好坏之别,合适的数据库设计就是最好的. 走过自考--<数据库系统原理>,看过耿建玲老师的视频,对数据库设计有了一点了解,VB版的机房收费系统,直接用原来的脚本生成的数据库,当时对数据库设计

VB.NET版机房收费系统---SqlHelper

SqlHelper,最早接触这个词儿的时候,好像是13年的暑假,那个夏天来的比往年来的稍晚一些,呵呵,sqlhelper,翻译成中文就是数据库助手,帮手.百度百科这样对她进行阐述: SqlHelper是一个基于.NET Framework的数据库操作组件.组件中包含数据库操作方法.SqlHelper用于简化我们重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等.SqlHelper 封装过后通常是只需要给方法传入一些参数如数据库连接字符串,

VB.NET版机房收费系统—数据库设计

之前第一遍机房收费的时候,用的数据库是别人的,认知也只能建立在别人的基础上,等自考中<数据库系统原理>这本书学完了之后,再去看以前的数据库,发现数据库真的还需要进一步的优化,下面是我设计数据库的一些见解,希望大家多提些意见. 数据库设计 E-R模型: 在观念模型设计阶段,一个系统都是建立在ER模型上的,设计好ER模型,很重要. 我设计的ER图: 系统中的实体:很简单,就是将系统中的名词都抽象出来,再具体了就是转换为数据库的逻辑设计时才要考虑的. 系统中的联系:在图中可以看得很清楚,这里我要重点

VB.NET版机房收费系统---导出Excel表格

datagridview,翻译成中文的意思是数据表格显示,使用DataGridView控件,可以显示和编辑来自不同类型的数据源的表格,将数据绑定到DataGridView控件非常简单和直观,大多数情况下,只需要设置DataSource属性即可,在绑定到包含多个列表或表的数据库源时,只需将DataMember属性设置为绑定的列表或表的字符串即可.机房收费系统多次用到数据表格的显示,并且导出为Excel表格,第一次机房收费系统是用VB版本的,她导出Excel的方法如下: 打开VB-工程-应用-勾选M