0

0

存储过程---留住你的美丽(下)

php中文网

php中文网

发布时间:2016-06-07 15:59:15

|

1426人浏览过

|

来源于php中文网

原创

继上篇博客,存储过程---留住你的美丽(上),接着叨叨,美丽是留住了,如何让美丽持久惊艳别人的眼球,我们就要开动我们的小脑袋,转一转,想一想,一如上篇博客中所展示的代码一样,需要传十一个参数,各个层之间都需要重复写,键盘累了,坏了怎么办nie?还

继上篇博客,存储过程---留住你的美丽(上),接着叨叨,美丽是留住了,如何让美丽持久惊艳别人的眼球,我们就要开动我们的小脑袋,转一转,想一想,一如上篇博客中所展示的代码一样,需要传十一个参数,各个层之间都需要重复写,键盘累了,坏了怎么办nie?还要重新上京东买,咳咳咳,言归正传,依旧结合机房收费来说,如何让存储过程美丽持久,流年过往,经年不忘......

在机房收费系统中,涉及三个组合查询,分别是学生基本信息维护、学生上机状态查看、操作员工作记录;如何让三个组合查询使用同一个存储过程,就需要我们转转小小的脑袋,几经周折,发现,我们可以把表名当成一个参数进行传递,这样,用到不同表的时候,我们只需要变更表名即可,存储过程写法如下所示:

USE [MachineRoomChargeSystem]
GO
/****** Object:  StoredProcedure [dbo].[Proc_GroupQuery]    Script Date: 08/01/2014 19:24:15 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<丁国华>
-- Create date: <2014年7月31日 20:08:32>
-- Description:	<组合查询--学生上机状态查看,操作员工记录>
-- =============================================
ALTER PROCEDURE [dbo].[Proc_GroupQuery]
	-- Add the parameters for the stored procedure here
	@cboFieldA varchar(10),           --字段名A
	@cboOperatorA varchar(10),        --操作符A
	@txtContentA varchar(10),         --要查询的内容A
	@cboRelationA varchar(10),        --组合关系A
	@cboFieldB varchar(10),           --字段名B
	@cboOperatorB varchar(10),        --操作符B
	@txtContentB varchar(10),         --要查询的内容B
	@cboRelationB varchar(10),        --组合关系B
	@cboFieldC varchar(11),           --字段C
	@cboOperatorC varchar(10),        --操作符C
	@txtContentC varchar(10),         --要查询的内容C
	@tableName varchar(50)            --要查询的视图名或表面名
	
	
AS
   declare @strText varchar(500)--临时存放sql语句
   --CHAR(32)是空格,CHAR(39)单引号
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	set @strText ='select * from '+@tableName+' where status !='+CHAR(39)+'正常上机'+CHAR(39)+' and status !='+char(39)+'正在值班'+CHAR(39)+' and'+CHAR(32)
	+@cboFieldA+@cboOperatorA+CHAR(39)+@txtContentA +CHAR(39)
	if @cboRelationA!=''
	begin
	set @strText=@strText+@cboRelationA+CHAR(32)+
    @cboFieldB+@cboOperatorB+CHAR(39
    )+@txtContentB+CHAR(39)
    end
	if @cboRelationB!=''
	begin
	set @strText=@strText+@cboRelationB+CHAR(32)+
    @cboFieldC+@cboOperatorC+CHAR(39)+@txtContentC+CHAR(39)
    end
    execute(@strText)
    
	
END
 
E---实体层写法如下:
'**********************************************
'文 件 名: GroupQueryEntity
'命名空间: Entity
'内    容:
'功    能: 组合查询
'文件关系:
'作    者:丁国华
'小    组:宝贝计划
'生成日期: 2014/7/31 21:33:57
'版本号:V2.0
'修改日志:
'版权说明:
'**********************************************

Public Class GroupQueryEntity
    ''' 
    ''' 组合查询用到的一系列实体
    ''' 
    ''' 
    Private _cboFieldA As String
    Public Property cboFieldA() As String
        Get
            Return _cboFieldA
        End Get
        Set(value As String)
            _cboFieldA = value
        End Set
    End Property

    Private _cboOperatorA As String
    Public Property cboOperatorA() As String
        Get
            Return _cboOperatorA
        End Get
        Set(value As String)
            _cboOperatorA = value
        End Set
    End Property

    Private _txtContentA As String
    Public Property txtContentA() As String
        Get
            Return _txtContentA
        End Get
        Set(value As String)
            _txtContentA = value
        End Set
    End Property

    Private _cboRelationA As String
    Public Property cboRelationA() As String
        Get
            Return _cboRelationA
        End Get
        Set(value As String)
            _cboRelationA = value
        End Set
    End Property

    Private _cboFieldB As String
    Public Property cboFieldB() As String
        Get
            Return _cboFieldB
        End Get
        Set(value As String)
            _cboFieldB = value
        End Set
    End Property

    Private _cboOperatorB As String
    Public Property cboOperatorB() As String
        Get
            Return _cboOperatorB
        End Get
        Set(value As String)
            _cboOperatorB = value
        End Set
    End Property

    Private _txtcontentB As String
    Public Property txtcontentB() As String
        Get
            Return _txtcontentB
        End Get
        Set(value As String)
            _txtcontentB = value
        End Set
    End Property

    Private _cboRelationB As String
    Public Property cboRelationB() As String
        Get
            Return _cboRelationB
        End Get
        Set(value As String)
            _cboRelationB = value
        End Set
    End Property

    Private _cboFieldC As String
    Public Property cboFieldC() As String
        Get
            Return _cboFieldC
        End Get
        Set(value As String)
            _cboFieldC = value
        End Set
    End Property

    Private _cboOperatorC As String
    Public Property cboOperatorC() As String
        Get
            Return _cboOperatorC
        End Get
        Set(value As String)
            _cboOperatorC = value
        End Set
    End Property

    Private _txtContentC As String
    Public Property txtContentC() As String
        Get
            Return _txtContentC
        End Get
        Set(value As String)
            _txtContentC = value
        End Set
    End Property

    Private _tableName As String
    Public Property tableName() As String
        Get
            Return _tableName
        End Get
        Set(value As String)
            _tableName = value
        End Set
    End Property

End Class
D层如下:就学生上机状态查询来说:
'**********************************************
'文 件 名: T_LineDAL
'命名空间: DAL
'内    容:
'功    能:
'文件关系:
'作    者:丁国华
'小    组:宝贝计划
'生成日期: 2014/7/25 10:39:13
'版本号:V2.0
'修改日志:
'版权说明:
'**********************************************
 ''' 
    ''' 组合查询-学生上机状态查看
    ''' 
    ''' 
    ''' 
    ''' 
    Public Function queryStatus(enGroupQuery As Entity.GroupQueryEntity) As List(Of Entity.LineEntity) Implements ILine.queryStatus

        Dim strText As String = "Proc_GroupQuery"  '从存储过程里面查询相应信息
        Dim cmdType As String = CommandType.StoredProcedure '命令类型
        Dim parameter As SqlParameter()   '传参

        parameter = {New SqlParameter("@cboFieldA", enGroupQuery.cboFieldA),
                   New SqlParameter("@cboOperatorA", enGroupQuery.cboOperatorA),
                   New SqlParameter("@txtContentA", enGroupQuery.txtContentA),
                   New SqlParameter("@cboRelationA", enGroupQuery.cboRelationA),
                   New SqlParameter("@cboFieldB", enGroupQuery.cboFieldB),
                   New SqlParameter("@cboOperatorB", enGroupQuery.cboOperatorB),
                   New SqlParameter("@txtContentB", enGroupQuery.txtcontentB),
                   New SqlParameter("@cboRelationB", enGroupQuery.cboRelationB),
                   New SqlParameter("@cboFieldC", enGroupQuery.cboFieldC),
                   New SqlParameter("@cboOperatorC", enGroupQuery.cboOperatorC),
                   New SqlParameter("@txtContentC", enGroupQuery.txtContentC),
                   New SqlParameter("@tableName", enGroupQuery.tableName)}


        Dim sqlHelper As New SqlHelper
        Dim dt As New DataTable
        Dim myList As List(Of Entity.LineEntity)

        dt = sqlHelper.ExecuteReaderTable(strText, cmdType, parameter)
        myList = EntityHelper.convertToList(Of Entity.LineEntity)(dt)
        Return myList
    End Function
End Class
对实体进行封装,把先前需要传递的十一个参数转换成现在只需要传递一个实体即可,还有一个细节问题需要注意的是,在存储过程里面SQL语句where后面的条件该如何写nie?就学生查看上机记录和操作员工作记录来说,第一个组合查询涉及到的状态有正常上机,正常下机,强制下机;第二个组合查询涉及到的状态有正在值班和下班两种状态,我们的第一个组合查询的业务需求是查出来的信息是状态不等于正常上机的相关信息,第二个组合查询的业务需求是状态不等于正在值班的相关信息,那么在where后面的条件到底是用and连接还是用or连接,小伙伴们都知道and的意思是和,连词,连接两个并列结构,or是或者的意思,整到这里,我就开始整蒙圈了,到底是用or还是用and呢?开始我的第一反应用的是or,要么执行这个,要么执行那个,别着急,让我们用实话说话,焦点访谈,呵呵,开个玩笑,在SQL中新建查询,看看用and连接,会发生什么好玩儿的事儿呢?
\ 

接着,用or连接:

\

进过对比,我们发现,第一个用and连接,查询出来的信息的状态包括正常上机的和正常下机的,但是根据机房收费系统的业务需求,需要我们查询出来的信息是正常下机的,显然第二个才是我们所需要的信息,聪明的读者,明白了么?

诚石C2C交易系统
诚石C2C交易系统

1. 页面全部经过SEO(搜索引擎优化)处理 2. 支持IE、FireFox等主流浏览器,在IE 和FireFox下显示相同的效果 3. 符合W3C国际网页标准,页面全部采用DIV+CSS布局 4. 采用SQL server数据库,所有数据库操作采用存储过程 5. 部分功能采用AJAX技术,良好的用户体验。 6. 后台集成在线HTML编辑软件FCKEditor,自定义美观的内容

下载

对比我们之前学习过的vb中的函数过程和我们的存储过程,有什么不一样的地方呢?存储过程不一定非要有返回值数据库中的函数一定有返回值;存储过程在前台语言可以直接调用 而函数一般要有sql语句做为载体;用户自定义函数在处理同一数据行中的各个字段时,特别方便有用。虽然这里使用存储过程也能达到查询目的,但是显然没有使用函数方便。而且,即使使用存储过程也无法处理SELECT查询中的同一数据行中的各个字段的运算。因为存储过程不返回值,使用时只能单独调用;而函数却能出现在能放置表达式的任何位置。第二版机房收费系统,未完,待续......

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

54

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

40

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

50

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

12

2026.01.31

漫画防走失登陆入口大全
漫画防走失登陆入口大全

2026最新漫画防走失登录入口合集,汇总多个稳定可用网址,助你畅享高清无广告漫画阅读体验。阅读专题下面的文章了解更多详细内容。

13

2026.01.31

php多线程怎么实现
php多线程怎么实现

PHP本身不支持原生多线程,但可通过扩展如pthreads、Swoole或结合多进程、协程等方式实现并发处理。阅读专题下面的文章了解更多详细内容。

1

2026.01.31

php如何运行环境
php如何运行环境

本合集详细介绍PHP运行环境的搭建与配置方法,涵盖Windows、Linux及Mac系统下的安装步骤、常见问题及解决方案。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php环境变量如何设置
php环境变量如何设置

本合集详细讲解PHP环境变量的设置方法,涵盖Windows、Linux及常见服务器环境配置技巧,助你快速掌握环境变量的正确配置。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php图片如何上传
php图片如何上传

本合集涵盖PHP图片上传的核心方法、安全处理及常见问题解决方案,适合初学者与进阶开发者。阅读专题下面的文章了解更多详细内容。

2

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MongoDB 教程
MongoDB 教程

共17课时 | 2.5万人学习

XML教程
XML教程

共142课时 | 6.1万人学习

php-src源码分析探索
php-src源码分析探索

共6课时 | 0.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号