需求介绍:


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


     其中有一个功能是学生注册,功能:注册学生的基本信息,同时可以在该学生帐户下存入一定的金额。


解决思路与办法:


因为,要学生注册信息的同时要对学生帐户进行充值,所以说要涉及到两个表的操作。一个是学生的基本信息表:student,还有一个是学生的充值记录表:RechargeRecord。可以想到,如果学生注册成功,那么,必须要向充值表中写入相应的充值记录,所以,我的解决办法,是用事务来实现。因为事务是原子性,可以要么都做,要么都不做。就算是写入到了学生的基本信息表,但是充值表中没有写入记录,也是注册不成功。


所以,我把事务写成了存储过程,让应用程序来调用:


下面是我的存储过程:


USE [ChargeSystem]
GO
/****** 对象: StoredProcedure [dbo].[StudentRegister] 脚本日期: 02/11/2012 14:30:08 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[StudentRegister]
-- Add the parameters for the stored procedure here
@CardNO varchar(10),
@StudentNO varchar(20),
@StudentName nvarchar(10),
@Sex nvarchar(2),
@STClass nchar(2),
@Grade nchar(3),
@Specialty nvarchar(50),
@Amount numeric(5,1),
@Status nvarchar(3),
@UserType nchar(4),
@Remarks nvarchar(50),
@RechargeTime datetime,
@Teacher nvarchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
declare @Transaction_name varchar(32)
select @Transaction_name='my_transaction_register'
begin Transaction @Transaction_name
insert into students values(@CardNO,@StudentNO,@StudentName,@Sex,@STClass,@Grade,@Specialty,@Amount,@Status,@UserType,@Remarks)
insert into RechargeRecord values(@CardNO,@StudentNO,@StudentName,@RechargeTime,@Amount,@Teacher)
commit transaction
return @@error
END

希望大家留下您的宝贵意见啊!