回看存储过程

      

      周六周日写了些查询的窗体,感觉没什么新鲜的东西,都是一堆select,后来写的到了注册,上下机等,在一个方法里面,包含了多个增删改查的过程,可能上一个访问数据库的过程返回的结果又是下一个访问数据库读取数据的参数。也就是说,这些对数据库的增删改查是一个连贯的动作,比如,注册一个学生的时候,涉及到注册金额,这个注册金额同时也要写到充值表里面去。既然他们是一起的,后来就很自然想到了用存储过程,将多条SQL语句封装起来,这样不仅避免了代码中多次访问数据库的情况,而且也减少了代码量。


      下面以充值做个DEMO,看一下这个存储过程:

   

USE [SecondCharge]
GO
/****** Object:  StoredProcedure [dbo].[Recharge]    Script Date: 06/09/2014 11:04:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[Recharge]		--充值
	
	@StuCardNum nchar(10),	--卡号
	@RecTeaName nchar(10),	--充值教师
	@RecRMB money 	--充值金额
	
as
	declare @FirstRMB money	--定义一个上次卡内余额的变量
	declare @RecDate nchar(10)	--定义充值日期
	declare @RecTime   nchar(10)	--定义充值时间
	
	Select @RecDate= CONVERT(varchar(100), GETDATE(), 23)
	Select @RecTime=CONVERT(varchar(100), GETDATE(), 24)
	
	
	--1,先取出此卡号对应的现在的总金额
	--2,先向充值表里面写入一条充值记录
	--3,然后更新学生信息表里面的金额
	--4,最后返回充值信息表
	
	select @FirstRMB=StuRMB from T_StuInfo where StuCardNum =@StuCardNum	--查询卡内余额
	
	insert into T_RechargeInfo values(@StuCardNum,
										@RecTeaName,
										@RecDate,
										@RecTime,
										@RecRMB,
										'未结账'
										)
	
	update T_StuInfo set StuRMB=(@FirstRMB +@RecRMB) where StuCardNum =@StuCardNum 
	
	--返回信息:充值卡号,上次卡内余额,现在卡内余额,充值日期,充值时间,充值教师
	
	select @StuCardNum as StuCardNum,
			@FirstRMB as FirstRMB,
			StuRMB as LastRMB,
			@RecDate as RecDate,
			@RecTime as RecTime,
			RecTeaName 
	from T_RechargeInfo,T_StuInfo 
	 where T_RechargeInfo.StuCardNum =T_StuInfo .StuCardNum 
			and  T_StuInfo.StuCardNum =@StuCardNum
			and RecDate=@RecDate 
			and RecTime=@RecTime
	 
			
	
	
 

 其执行结果如下:


    



     解释一下:这个过程大致是这个样子的:

    --1,先取出此卡号对应的现在的总金额
	--2,先向充值表里面写入一条充值记录
	--3,然后更新学生信息表里面的金额
	--4,最后返回充值信息表

        首先定义好传入的参数:卡号,充值教师,充值金额;然后,按照大致的过程,为每一条过程写一个SQL语句;最后是输出部分,如果输出结果是单个参数,可以用output,也可以如上所示,输出个表。


       在输出的时候,可以用as更改输出表的列名。为什么要更改列名呢?目前看到两个好处:


          1,在绑定DataGridView的时候,不用手动加载HeaderText,这种是对于返回到U层是datatable的情况。

          2,另一种好处就是,在将存储过程执行完之后,将datatable转换为实体集合的时候,因为有一个属性名和  datatable的字段名必须对应的要求,所以,可以说,必须要求select语句中使用as命名字段名,否则实体集合会出现转换失败返回空集合的情况。


评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水田如雅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值