机房收费系统中——存储过程中加入事务,实现学生注册

需求介绍:

现在正在开发的机房收费系统,总得来说,是对学生上机进行收费管理(没有要在学校开网吧的意思啊!为了学习面开发的)大体的功能是这样的:学生上机,然后刷卡,下机的时候,再刷卡,然后通过对学生的上机时间收取相应的费用,同时,该系统还可以统计与维护学生的基本信息、上机记录、学生注册、充值、退卡等功能。
     其中有一个功能是学生注册,功能:注册学生的基本信息,同时可以在该学生帐户下存入一定的金额。

解决思路与办法:

因为,要学生注册信息的同时要对学生帐户进行充值,所以说要涉及到两个表的操作。一个是学生的基本信息表:student,还有一个是学生的充值记录表:RechargeRecord。可以想到,如果学生注册成功,那么,必须要向充值表中写入相应的充值记录,所以,我的解决办法,是用事务来实现。因为事务是原子性,可以要么都做,要么都不做。就算是写入到了学生的基本信息表,但是充值表中没有写入记录,也是注册不成功。
所以,我把事务写成了存储过程,让应用程序来调用:
下面是我的存储过程:
  1. USE [ChargeSystem]  
  2. GO  
  3. /****** 对象:  StoredProcedure [dbo].[StudentRegister]    脚本日期: 02/11/2012 14:30:08 ******/  
  4. SET ANSI_NULLS ON  
  5. GO  
  6. SET QUOTED_IDENTIFIER ON  
  7. GO  
  8. -- =============================================  
  9. -- Author:      <Author,,Name>  
  10. -- Create date: <Create Date,,>  
  11. -- Description: <Description,,>  
  12. -- =============================================  
  13. ALTER PROCEDURE [dbo].[StudentRegister]   
  14.     -- Add the parameters for the stored procedure here  
  15.     @CardNO varchar(10),  
  16.     @StudentNO varchar(20),  
  17.     @StudentName nvarchar(10),  
  18.     @Sex nvarchar(2),  
  19.     @STClass nchar(2),  
  20.     @Grade nchar(3),  
  21.     @Specialty nvarchar(50),  
  22.     @Amount numeric(5,1),  
  23.     @Status nvarchar(3),  
  24.     @UserType nchar(4),  
  25.     @Remarks nvarchar(50),  
  26.     @RechargeTime datetime,  
  27.     @Teacher nvarchar(50)  
  28. AS  
  29. BEGIN  
  30.     -- SET NOCOUNT ON added to prevent extra result sets from  
  31.     -- interfering with SELECT statements.  
  32.     SET NOCOUNT ON;  
  33.   
  34.     -- Insert statements for procedure here  
  35.     declare @Transaction_name varchar(32)  
  36.     select @Transaction_name='my_transaction_register'  
  37.     begin Transaction @Transaction_name  
  38.     insert into students values(@CardNO,@StudentNO,@StudentName,@Sex,@STClass,@Grade,@Specialty,@Amount,@Status,@UserType,@Remarks)  
  39.     insert into RechargeRecord values(@CardNO,@StudentNO,@StudentName,@RechargeTime,@Amount,@Teacher)  
  40.     commit transaction   
  41.     return @@error  
  42. END  

其中用@@error来取得执行结果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值