`
sunqing0316
  • 浏览: 41956 次
  • 性别: Icon_minigender_2
文章分类
社区版块
存档分类
最新评论

二见钟情之组合查询(vb.net版)

 
阅读更多

第一遍做机房系统组合查询的时候用的是VB6.0,当时就一个感觉:乱。当时做的时候稀里糊涂的,好不容易应付了事,松了口气。这次是第二遍,用VB.NET还没开始做呢,心里就开始打鼓了,不过做完了以后,发现还是挺有意思的。在做之前也是一边各种查一边各种想,我用的是拼接字符串,主要是参考了高迎的博客。下面以“学生基本信息维护”为例来说说我是怎么做的。

首先是界面:

首先是U层代码,这一层的代码觉得还是很重要的

Imports BLL
Imports Entity

Public Class frmStudentData


    Private Sub frmStudentData_Load(sender As Object, e As EventArgs) Handles Me.Load

        '窗体刚加载的时候,只允许第一组查询条件可用
        comboField2.Enabled = False
        comboOperate2.Enabled = False
        comboCheck2.Enabled = False
        comboUnion2.Enabled = False
        comboField3.Enabled = False
        comboOperate3.Enabled = False
        comboCheck3.Enabled = False

        comboUnion1.Items.Clear()
        comboUnion1.Items.Add("")
        comboUnion1.Items.Add("或")
        comboUnion1.Items.Add("与")


    End Sub


    Private Sub comboUnion1_TextChanged(sender As Object, e As EventArgs) Handles comboUnion1.TextChanged
        '当鼠标点击第一个组合关系框的时候,判断第一组查询条件是否填写完整
        '若不完整,给出提示
        '若完整,则第二组查询条件和第二个关系组合框变为可用
        If comboField1.Text <> "" And comboOperate1.Text <> "" And comboCheck1.Text <> "" Then
            comboField2.Enabled = True
            comboOperate2.Enabled = True
            comboCheck2.Enabled = True
            comboUnion2.Enabled = True

            comboUnion2.Items.Clear()
            comboUnion2.Items.Add("或")
            comboUnion2.Items.Add("与")

        Else
            MsgBox("请将第一组查询条件填写完整!", , "提示")
            Exit Sub
        End If

    End Sub

    Private Sub comboUnion2_TextChanged(sender As Object, e As EventArgs) Handles comboUnion2.TextChanged
        '当鼠标点击第二个组合关系框的时候,判断第二组查询条件是否填写完整
        '若不完整,给出提示
        '若完整,则第三组查询条件可用
        If comboField2.Text <> "" And comboOperate2.Text <> "" And comboCheck2.Text <> "" Then
            comboField3.Enabled = True
            comboOperate3.Enabled = True
            comboCheck3.Enabled = True
        Else
            MsgBox("请将第二组查询条件填写完整", , "提示")
            Exit Sub
        End If
    End Sub

    Private Sub btnQuit_Click(sender As Object, e As EventArgs) Handles btnQuit.Click
        End
    End Sub

    Private Sub btnCheck_Click(sender As Object, e As EventArgs) Handles btnCheck.Click
        If comboField1.Text = "" Or comboOperate1.Text = "" Or comboCheck1.Text = "" Then
            MsgBox("请将查询条件填写完整!", , "提示")
            Exit Sub
        End If



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

        '按照组合框的组合关系来分别针对每一种组合关系来拼接字符串
        '当组合关系框均为空时
        If comboUnion1.Text = "" Then
            sqlstring = GetEnglish(comboField1.Text) + comboOperate1.Text + comboCheck1.Text
            '当第一个组合框不为空,第二个组合框为空时有两种情况:
            '1、“或”“空”
        ElseIf comboUnion1.Text = "或" And comboUnion2.Text = "" Then
            sqlstring = GetEnglish(comboField1.Text) + comboOperate1.Text + comboCheck1.Text Or GetEnglish(comboField2.Text) + comboOperate2.Text + comboCheck2.Text
            '2、“与”“空”
        ElseIf comboUnion1.Text = "与" And comboUnion2.Text = "" Then
            sqlstring = GetEnglish(comboField1.Text) + comboOperate1.Text + comboCheck1.Text And GetEnglish(comboField2.Text) + comboOperate2.Text + comboCheck2.Text
            
		 '当两个组合框均不为空时,有四种组合情况
            '1、“或”“或”
        ElseIf comboUnion1.Text = "或" And comboUnion2.Text = "或" Then
            sqlstring = GetEnglish(comboField1.Text) + comboOperate1.Text + comboCheck1.Text Or GetEnglish(comboField2.Text) + comboOperate2.Text + comboCheck2.Text Or GetEnglish(comboField3.Text) + comboOperate3.Text + comboCheck3.Text


            '2、“与”“与”
        ElseIf comboUnion1.Text = "与" And comboUnion2.Text = "与" Then
            sqlstring = GetEnglish(comboField1.Text) + comboOperate1.Text + comboCheck1.Text And GetEnglish(comboField2.Text) + comboOperate2.Text + comboCheck2.Text And GetEnglish(comboField3.Text) + comboOperate3.Text + comboCheck3.Text

            '3、“或”“与”
        ElseIf comboUnion1.Text = "或" And comboUnion2.Text = "与" Then
            sqlstring = GetEnglish(comboField1.Text) + comboOperate1.Text + comboCheck1.Text Or GetEnglish(comboField2.Text) + comboOperate2.Text + comboCheck2.Text And GetEnglish(comboField3.Text) + comboOperate3.Text + comboCheck3.Text

            '4、“与”“或”
        ElseIf comboUnion1.Text = "与" And comboUnion2.Text = "或" Then
            sqlstring = GetEnglish(comboField1.Text) + comboOperate1.Text + comboCheck1.Text And GetEnglish(comboField2.Text) + comboOperate2.Text + comboCheck2.Text Or GetEnglish(comboField3.Text) + comboOperate3.Text + comboCheck3.Text

        End If

        '调用B层函数
        Dim dtStuData As DataTable = StuCardManageBLL.CheckStuData(sqlstring)
        If dtStuData.Rows.Count = 0 Then
            MsgBox("没有记录,请重试!", , "提示")

            Exit Sub
            dtStuData.Clear()
            DataGridView1.DataSource = Nothing
            DataGridView1.Refresh()

        Else
            '显示记录
            DataGridView1.Refresh()
            DataGridView1.DataSource = dtStuData

        End If

    End Sub


    '将界面上的中文字段名转换为数据库中的英文字段名
    Public Function GetEnglish(ByVal strField As String) As String
        Select Case (strField)
            Case "卡号"
                Return "CardNo"
            Case "学号"
                Return "StudentNo"
            Case "姓名"
                Return "Name"
            Case "性别"
                Return "Sex"
            Case "系别"
                Return "Department"
            Case "年级"
                Return "Grade"
            Case "班级"
                Return "Class"
            Case "教师"
                Return "Teacher"
            Case Else
                Return ""
        End Select
    End Function


B层代码:

   '组合查询
 '学生基本信息维护
 Public Shared Function CheckStuData(ByVal sqlstring As String) As DataTable
 '调用D层函数
 Dim dtStuData As DataTable = sqlStuCardManage.CheckStuData(sqlstring)
 Return dtStuData
 End Function
 '查询用户
 Public Shared Function CheckUserID(ByVal enUser As UserInfoEntity) As DataTable
 '调用D层函数
 Dim dtUser As DataTable = sqlUserManage.CheckUserID(enUser)
 Return dtUser
 End Function

D层代码

  '组合查询
 '学生基本信息维护
 Public Shared Function CheckStuData(ByVal sqlstring As String) As DataTable
 Dim sqlhelper As New sqlHelper.sqlHelper
 Dim cmdtext As String = "select * from [T_StudentCard] where " + sqlstring
 Dim dtStuData As DataTable = sqlhelper.ExecSelect(cmdtext, CommandType.Text)
 Return dtStuData
 End Function
   '查询用户
 Public Shared Function CheckUserID(ByVal enUser As UserInfoEntity) As DataTable
 Dim sqlhelper As New sqlHelper.sqlHelper
 Dim cmdtext As String = "select UserID from [T_User] where [Level]<>@Levle"
 Dim sqlparas As SqlParameter() = {New SqlParameter("@Levle", "一般用户")}
 Dim dtUser As DataTable = sqlhelper.ExecSelect(cmdtext, CommandType.Text, sqlparas)
 Return dtUser
 End Function

细节处理

其实,到现在为止,组合查询就已经可以完成了,但是,软件设计的总是是全心全意为人民服务,所以就在U层又添了点代码。之所以“查询内容”使用的是ComboBox控件而不是TextBox,是希望它的形式可以根据“字段名”内容的变化而变化。比如“字段名”是“卡号”,那么就将ComboBox的下拉形式改为Simple,这样就可以让用户直接输入,在输入的同时还提醒用户只能输入数字。类似的设置代码如下:

Private Sub comboField1_Click(sender As Object, e As EventArgs) Handles comboField1.Click
        comboField1.Items.Clear() '每次单击事件都要清空,方式累加显示
        comboField1.Items.Add("")
        comboField1.Items.Add("卡号")
        comboField1.Items.Add("学号")
        comboField1.Items.Add("姓名")
        comboField1.Items.Add("性别")
        comboField1.Items.Add("系别")
        comboField1.Items.Add("年级")
        comboField1.Items.Add("班级")
        comboField1.Items.Add("教师")

    End Sub


    Private Sub comboCheck1_GotFocus(sender As Object, e As EventArgs) Handles comboCheck1.GotFocus
        If comboField1.Text = "卡号" Or comboField1.Text = "学号" Or comboField1.Text = "姓名" Then
            comboCheck1.DropDownStyle = ComboBoxStyle.Simple '变为文本框输入格式

        End If
        Select Case comboField1.Text
            
            Case "性别"
                comboCheck1.DropDownStyle = ComboBoxStyle.DropDownList  '变为下拉列表格式(不可输入)
                comboCheck1.Items.Clear()
                comboCheck1.Items.Add("")
                comboCheck1.Items.Add("男")
                comboCheck1.Items.Add("女")
            Case "系别"
                comboCheck1.DropDownStyle = ComboBoxStyle.DropDownList  '变为下拉列表格式(不可输入)
                comboCheck1.Items.Clear()
                comboCheck1.Items.Add("")
                comboCheck1.Items.Add("新闻")
                comboCheck1.Items.Add("心理")
                comboCheck1.Items.Add("计算机")
                comboCheck1.Items.Add("生科")
                comboCheck1.Items.Add("体育")
            Case "年级"
                comboCheck1.DropDownStyle = ComboBoxStyle.DropDownList  '变为下拉列表格式(不可输入)
                comboCheck1.Items.Clear()
                comboCheck1.Items.Add("")
                comboCheck1.Items.Add("1")
                comboCheck1.Items.Add("2")
                comboCheck1.Items.Add("3")
                comboCheck1.Items.Add("4")
            Case "班级"
                comboCheck1.DropDownStyle = ComboBoxStyle.DropDownList  '变为下拉列表格式(不可输入)
                comboCheck1.Items.Clear()
                comboCheck1.Items.Add("")
                comboCheck1.Items.Add("1")
                comboCheck1.Items.Add("2")
                comboCheck1.Items.Add("3")
                comboCheck1.Items.Add("4")
                comboCheck1.Items.Add("5")
            Case "教师"
                comboCheck1.DropDownStyle = ComboBoxStyle.DropDown  '变为既可输入又可选择的形式
                comboCheck1.Items.Clear()
                '将所有非一般用户的用户ID全部显示在下拉列表里
                '调用B层函数
                '实例化实体
                Dim enUser As New UserInfoEntity
                Dim dtUser As DataTable = UserManageBLL.CheckUserID(enUser)
                If dtUser.Rows.Count = 0 Then
                    MsgBox("没有教师记录!", , "提示")
                    Exit Sub
                Else
                    '将教师的用户ID显示在comboCheck1中
                    comboCheck1.Items.Add("")
                    For k = dtUser.Rows.Count To 1 Step -1
                        Dim UserID As String = dtUser.Rows(k - 1)(0)
                        comboCheck1.Items.Add(UserID)
                    Next
                End If


        End Select

以上只是第一组查询条件的设置,类似控件设置同上,所以就不全写出来了。

小结:

当然,到现在为止依然是不完美,不过还好,先这样吧。继续往下走吧。

分享到:
评论

相关推荐

    034-基于AT89C52的矩阵键盘扫描proteus仿真设计.rar

    51单片机

    双级式储能模型,可做充放电转以及低电压故障穿越,含有负序抑制模块,可做对称故障与不对称故障

    双级式储能模型,可做充放电转以及低电压故障穿越,含有负序抑制模块,可做对称故障与不对称故障

    郑州升达大学2024-2025第一学期计算机视觉课程期末试卷,

    郑州升达大学2024-2025第一学期计算机视觉课程期末试卷,原版。配套教材为《OpenCV计算机视觉基础教程》夏帮贵主编。

    金工实习线上考试线切割课后试题.docx

    线切割课后试题

    网络原理课程设计【校园网规划】+思科模拟器,包含pkt文件及完整实验报告,附录含有源码

    目录 摘 要 1 一、设计任务概述 3 1.1 设计目的 3 1.2 项目任务和要求 3 1.3 参考资料 3 二、项目开发环境 4 三、项目需求分析 5 四、 项目设计和实现 5 4.1 总体设计 5 4.2 功能设计 6 4.3 系统实现 7 五、系统运行和测试 12 六、设计总结 15 七、附录 16 7.1 程序清单 16 7.2 其他需要说明的内容 23。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    智慧物联网系统发展战略研究

    智慧物联网系统发展战略研究

    基于springboot+vue的大创管理系统2(Java毕业设计,附源码,部署教程).zip

    该项目包含完整的前后端代码、数据库脚本和相关工具,简单部署即可运行。功能完善、界面美观、操作简单,具有很高的实际应用价值,非常适合作为Java毕业设计或Java课程设计使用。 所有项目均经过严格调试,确保可运行!下载后即可快速部署和使用。 1 适用场景: 毕业设计 期末大作业 课程设计 2 项目特点: 代码完整:详细代码注释,适合新手学习和使用 功能强大:涵盖常见的核心功能,满足大部分课程设计需求 部署简单:有基础的人,只需按照教程操作,轻松完成本地或服务器部署 高质量代码:经过严格测试,确保无错误,稳定运行 3 技术栈和工具 前端:HTML + Vue.js 后端框架:Spring Boot 开发环境:IntelliJ IDEA 数据库:MySQL(建议使用 5.7 版本,更稳定) 数据库可视化工具:Navicat 部署环境:Tomcat(推荐 7.x 或 8.x 版本),Maven

    基于springboot+vue的网上点餐系统(Java毕业设计,附源码,部署教程).zip

    该项目包含完整的前后端代码、数据库脚本和相关工具,简单部署即可运行。功能完善、界面美观、操作简单,具有很高的实际应用价值,非常适合作为Java毕业设计或Java课程设计使用。 所有项目均经过严格调试,确保可运行!下载后即可快速部署和使用。 1 适用场景: 毕业设计 期末大作业 课程设计 2 项目特点: 代码完整:详细代码注释,适合新手学习和使用 功能强大:涵盖常见的核心功能,满足大部分课程设计需求 部署简单:有基础的人,只需按照教程操作,轻松完成本地或服务器部署 高质量代码:经过严格测试,确保无错误,稳定运行 3 技术栈和工具 前端:HTML + Vue.js 后端框架:Spring Boot 开发环境:IntelliJ IDEA 数据库:MySQL(建议使用 5.7 版本,更稳定) 数据库可视化工具:Navicat 部署环境:Tomcat(推荐 7.x 或 8.x 版本),Maven

    直流电机的电枢回路串电阻启动的计算

    电机与拖动技术三级项目报告,直流电动机是电机的主要类型之一,具有调速范围广、调速特性平滑、过载能力强等优点,在生产生活中具有广泛的应用。此次课程项目阐述了直流电动机的结构、应用、并着重对电枢回路串电阻分级启动进行深入研究,MATLAB仿真软件对直流电动机分级启动进行仿真。

    Java Spring Boot实现基于URL + IP访问频率限制(源代码)

    详细说明:https://blog.csdn.net/a342874650/article/details/144989766 在 Web 应用中,恶意用户可能会通过频繁刷新接口或进行暴力请求来攻击系统,导致服务器负载过高或服务不可用。为了应对这一问题,本文将详细介绍如何使用 Spring Boot 结合拦截器(Interceptor)和 Redis 来实现基于 URL 和 IP 的访问频率限制。具体实现包括拦截器拦截请求、Redis 存储访问记录、检测访问频率并在达到限制时禁用 IP 的完整过程。通过本文的详细实现过程和完整源代码,读者可以快速掌握如何在自己的项目中应用这一机制来增强系统的安全性和稳定性。

    JavaEE核心技术:Web框架与持久层设计方案解析(主观题考试题库)

    内容概要:本文详细介绍了JavaEE核心技术,涵盖多个重要的Web框架和持久层技术,以及其应用场景和实施方案。具体内容包括:①Struts框架的特点和功能,特别是其对MVC架构的支持,以及如何应用于薪资管理系统;②MVC架构的基本概念和如何通过JSP、JavaBean及Servlet实现成绩管理系统;③Spring IoC容器的工作原理,强调其控制反转和依赖注入功能,展示了整合Struts和JPA的具体案例,如通讯管理系统Web层设计方案;④Spring MVC结构及其XML配置方法,并提出一种针对图书管理系统的Spring MVC实现思路;⑤深入探讨Spring AOP原理,介绍如何使用XML配置进行统一事务处理的应用方案;⑥分析Hibernate核心接口及设备管理系统持久层设计方案;⑦整合Hibernate和Spring IoC实现的成绩管理系统持久层设计方案。 适合人群:具备一定Java基础的初、中级JavaEE开发者,对JavaWeb开发有兴趣的学习者。 使用场景及目标:①帮助开发者理解JavaEE关键技术和框架的实际运用,提高项目开发技能;②指导实际项目的架构设计和技术选型;③促进团队协作,提高代码复用性和维护效率。 阅读建议:建议读者根据自身经验和兴趣选择重点章节仔细研读,并结合实际情况尝试实践,逐步掌握各知识点。此外,还应该结合最新的API文档和技术论坛资料不断跟进更新。

    easy-interceptor修改请求头和响应头.zip

    easy-interceptor修改请求头和响应头.zip

    Prime-Series-Level-1.z10

    Prime_Series_Level-1.z10 别下,这个是分卷压缩,笔者用来备份的

    基于springboot+vue的教师工作量管理系统(Java毕业设计,附源码,部署教程).zip

    该项目包含完整的前后端代码、数据库脚本和相关工具,简单部署即可运行。功能完善、界面美观、操作简单,具有很高的实际应用价值,非常适合作为Java毕业设计或Java课程设计使用。 所有项目均经过严格调试,确保可运行!下载后即可快速部署和使用。 1 适用场景: 毕业设计 期末大作业 课程设计 2 项目特点: 代码完整:详细代码注释,适合新手学习和使用 功能强大:涵盖常见的核心功能,满足大部分课程设计需求 部署简单:有基础的人,只需按照教程操作,轻松完成本地或服务器部署 高质量代码:经过严格测试,确保无错误,稳定运行 3 技术栈和工具 前端:HTML + Vue.js 后端框架:Spring Boot 开发环境:IntelliJ IDEA 数据库:MySQL(建议使用 5.7 版本,更稳定) 数据库可视化工具:Navicat 部署环境:Tomcat(推荐 7.x 或 8.x 版本),Maven

    CST0402B+跟岗实习提交资料.zip

    CST0402B+跟岗实习提交资料.zip

    基于yolov5的医学影像肺结节检测项目源码+文档说明(高分项目)

    基于yolov5的医学影像肺结节检测项目源码+文档说明(高分项目),个人大三大设计项目、经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为毕业设计、课程设计、期末大作业。 基于yolov5的医学影像肺结节检测项目源码+文档说明(高分项目)基于yolov5的医学影像肺结节检测项目源码+文档说明(高分项目)基于yolov5的医学影像肺结节检测项目源码+文档说明(高分项目)基于yolov5的医学影像肺结节检测项目源码+文档说明(高分项目)基于yolov5的医学影像肺结节检测项目源码+文档说明(高分项目)基于yolov5的医学影像肺结节检测项目源码+文档说明(高分项目)基于yolov5的医学影像肺结节检测项目源码+文档说明(高分项目)基于yolov5的医学影像肺结节检测项目源码+文档说明(高分项目)基于yolov5的医学影像肺结节检测项目源码+文档说明(高分项目)基于yolov5的医学影像肺结节检测项目源码+文档说明(高分项目)基于yolov5的医学影像肺结节检测项目源码+文

    循环法和对数法计算利息

    本金1W利息0.0325,几年能double?

    matlab机械臂关节空间轨迹规划,3-5-3分段多项式插值法,六自由度机械臂,该算法可运用到仿真建模机械臂上实时运动,可视化轨迹,有角度,速度,加速度仿真曲线 也可以有单独角度,速度,加速度仿真曲

    matlab机械臂关节空间轨迹规划,3-5-3分段多项式插值法,六自由度机械臂,该算法可运用到仿真建模机械臂上实时运动,可视化轨迹,有角度,速度,加速度仿真曲线。 也可以有单独角度,速度,加速度仿真曲线。 可自行更程序中机械臂与点的参数。 谢谢大家 (程序中均为弧度制参数)353混合多项式插值

    2011-2023年各省金融监管水平数据(含原始数据+计算过程+计算结果)

    2011-2023年各省金融监管水平数据(含原始数据+计算过程+计算结果) 1、时间:2011-2023年 2、来源:国家统计J、统计NJ 3、指标:金融业增加值、金融监管支出、金融监管水平 4、计算方法:金融监管水平=金融监管支出/金融业增加值

    简易手写汉字表.pdf

    本表名称为简易手写识字表,收录了21000多个汉字,每个汉字后面附上了简易手写笔画和输入编码。独体字是一个主笔画和一个字母编码,双码字是两个主笔画组合和两个字母编码,多码字是两个主笔画组合和三个字母编码。可用于识字、简易手写和大键盘汉字输入等参考。

Global site tag (gtag.js) - Google Analytics