机房重构组合查询-储存过程

举报
ksh1998 发表于 2021/12/25 22:27:21 2021/12/25
【摘要】 **前言:**在VB版本的时候实现组合查询使用sql语句的条件拼接完成的,因为vb版本的时候还没有使用分层的思想。还没有学习三层架构,再次重构的时候使用了三层架构与融合了设计模式进行实现的。并且还使用了在...

**前言:**在VB版本的时候实现组合查询使用sql语句的条件拼接完成的,因为vb版本的时候还没有使用分层的思想。还没有学习三层架构,再次重构的时候使用了三层架构与融合了设计模式进行实现的。并且还使用了在学习数据库视频时候学的储存过程:具体的存储过程介绍:https://blog.csdn.net/kangshihang1998/article/details/105821646 这篇博客总结了存储过程和触发器的对比。

以操作员工作记录为例:
UI界面
在这里插入图片描述
业务逻辑:

 /// <summary>
        /// 实例化工厂,用于创建D登录查询类。
        /// </summary>
        FactoryDAl fact = new FactoryDAl();
        /// <summary>
        /// 组合查询方法
        /// </summary>
        /// <param name="comf1">字段1</param>
        /// <param name="comf2">字段2</param>
        /// <param name="comf3">字段3</param>
        /// <param name="comoper1">操作符1</param>
        /// <param name="comoper2">操作符2</param>
        /// <param name="comoper3">操作符3</param>
        /// <param name="contetn1">内容1</param>
        /// <param name="content2">内容2</param>
        /// <param name="contetn3">内容3</param>
        /// <param name="rel1">组合关系1</param>
        /// <param name="rel2">组合关系2</param>
        /// <param name="form">组合查询窗体</param>
        /// <returns></returns>
        public DataTable SelectGroupQuer(string comf1, string comf2, string comf3, string comoper1, string comoper2, string comoper3, string contetn1, string content2, string contetn3, string rel1, string rel2, string DbName, Form form)
        {
            DataTable SelectGroupQuerTable = new DataTable();
            //调用接口与工厂
            GroupQuerIDAL groupQuerIDAL = (GroupQuerIDAL)fact.CreateUser("GroupQuerDAL");
            #region 第一组条件赋值
            GroupQuery groupQuery = new GroupQuery();
            groupQuery.Field1 =comf1;
            groupQuery.Operator1 = comoper1;
            groupQuery.Content1 = contetn1;
            groupQuery.DbName = DbName;
            #endregion
            #region 第二组条件赋值
            groupQuery.Relation1 =rel1;
            groupQuery.Field2 = comf2;
            groupQuery.Operator2 = comoper2;
            groupQuery.Content2 = content2;
            #endregion
            #region 第三组条件赋值
            groupQuery.Field3 = comf3;
            groupQuery.Operator3 = comoper3;
            groupQuery.Content3 = contetn3;
            groupQuery.Relation2 = rel2;
            #endregion
            #region 组合查询逻辑
            //判断第一个组合关系是否被选中
            if (rel1.Trim()!="")//被选中
            {
                #region 判断第二个组合关系是否被玄宗
                if (rel2.Trim()!="")//被选中
                {
                    #region 判断所有控件内容是否为空
                    if (comf1.Trim() != "" && comoper1.Trim() != "" && contetn1.Trim() != "")
                    {
                        if (comf2.Trim() != "" && comoper2.Trim() != "" && content2.Trim() != "")
                        {
                            if (comf3.Trim() != "" && comoper3.Trim() != "" && contetn3.Trim() != "")
                            {
                                //查询具体内容
                                SelectGroupQuerTable = groupQuerIDAL.SelectGroupQuer(groupQuery);
                            }//第三组
                        }//第二组
                    }//第一组
                    #endregion
                }
                else
                {
                    #region 判断前两组控件的内容是否为空
                    if (comf1.Trim() != "" && comoper1.Trim() != "" && contetn1.Trim() != "")
                    {
                        if (comf2.Trim() != "" && comoper2.Trim() != "" && content2.Trim() != "")
                        {
                            //查询具体内容
                            SelectGroupQuerTable = groupQuerIDAL.SelectGroupQuer(groupQuery);
                        }//第二组
                    }//第一组
                    #endregion
                }
                #endregion
            }
            else//没被选中
            {
                #region 判断第一组控件内容是否为空
                if (comf1.Trim() != "" && comoper1.Trim() != "" && contetn1.Trim() != "")
                {
                    //查询具体内容
                    SelectGroupQuerTable = groupQuerIDAL.SelectGroupQuer(groupQuery);
                }
                #endregion
            }
            #endregion
            return SelectGroupQuerTable;
        }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93

DAL(与其它的一样)
还有DAL层调用储存过程与正常的sql语句一样,把储存过程的名字传到sqlherper助手类里。
不同的地方是sql语句类型从文本变成了CommandType.StoredProcedure 这个的具体解释是
传入的是一个存储过程类型sql语句。
储存过程:

USE [charging_system]
GO
/****** Object:  StoredProcedure [dbo].[PROC_GroupCheck]    
Script Date: 2020/5/5 20:14:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[PROC_GroupCheck] 
    -- Add the parameters for the stored procedure here
    @DbName nvarchar(50),
    @comboFields1 nvarchar(20),
    @comboFields2 nvarchar(20),
    @comboFields3 nvarchar(20),
    @comboOperators1 nvarchar(10),
    @comboOperators2 nvarchar(10),
    @comboOperators3 nvarchar(10),
    @textBox1 nvarchar(20),
    @textBox2 nvarchar(20),
    @textBox3 nvarchar(20),
    @comboCheck1 nvarchar(10),
    @comboCheck2 nvarchar(10)

AS 
declare @TempSql varchar(500)--临时存放sql语句
--Char(32)是空格  插入(39)是单引号
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
	if(@comboCheck1='')--初始化组合关系状态
	set @comboCheck1=null
	if(@comboCheck2='')
	set @comboCheck2=null
    --一个条件的查询
    SET @TempSql='select * from '+@DbName+' 
    where'+char(32)+@comboFields1+@comboOperators1+char(39)
    +@textBox1+char(39)
    if(@comboCheck1 is not null)
    begin
    --两个条件的查询
    SET @TempSql=@TempSql+char(32)+@comboCheck1+char(32)+@comboFields2+
    @comboOperators2+
    char(39)+@textBox2+char(39)
    if(@comboCheck2 is not null)
    begin

    --三个条件的查询
    SET @TempSql=@TempSql+char(32)+@comboCheck2+char(32)+@comboFields3
    +@comboOperators3+
    cha
r(39)+@textBox3+char(39)
    end
    end
    execute(@Tempsql)
END

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55

总结:
整个组合查询使用的是同一条业务线(就UI层不是同一个窗体),除了往储存过程中传的数据表名不一样外。其它的参数都是相同的。所以写一个组合查询通用的储存过程很重要,因为在储存过程中把需要查询的数据表名用参数代替了,这样就可以灵活替换具体的数据表了。

文章来源: kangshihang.blog.csdn.net,作者:康世行,版权归原作者所有,如需转载,请联系作者。

原文链接:kangshihang.blog.csdn.net/article/details/105937523

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。