设为首页 加入收藏

TOP

机房收费系统(VB.NET)――存储过程实战(一)
2014-11-24 07:55:27 来源: 作者: 【 】 浏览:2
Tags:机房 收费系统 VB.NET 存储 过程 实战

最初接触存储过程是在耿建玲老师的视频里,当初只是草草过了一遍,只是有了个印象,知道了这个名词;大二时也有SqlServer数据库这门课,不过老师没讲,自己也没看;真正对存储过程的了解来自于自学考试中的《数据库系统原理》,在考试中,知道存储过程是干嘛的,在纸上怎么写,但从来没有在DBMS中亲手敲过。于是机房收费系统给了我这个机会。
在这里不再过多叙述关于存储过程德基本知识,只写一下在机房收费系统这个小项目中是如何用到存储过程的。

背景:

机房收费系统中有一个注册的功能,原型图如下:

\

注册时,需要对数据库中的三个表进行更新(向卡表T_Card、学生表T_Student、充值表T_Register中分别新增一条记录),所以,执行时,如果用执行SQL语句的方式,那就需要执行三次SQL语句:

1:向卡表T_Card添加记录

 insert into T_Card(cardNumber ,balance ,type ,stuNumber ,status ,isChecked ) values(@cardNumber ,@balance, @type ,@stuNumber ,@status ,@isChecked )
2:向学生表T_Student添加记录
 insert into T_Student (stuNumber,stuName,stuSex,stuMajor,stuGrade,stuClass  ,comment ) values (@stuNumber ,@stuName ,@stuSex ,@stuMajor ,@stuGrade ,@stuClass,@comment )
3:向充值表T_Register添加记录
insert into chargesystem.dbo.T_Recharge (userID,cardNumber,rechargeCash ,rechargeDate ,rechargeTime ,isChecked )values(@userID,@cardNumber ,@balance, CONVERT(varchar,getdate(),120),CONVERT(varchar,GETDATE(),108),'未结账')

存储过程的使用

对于上面的需求,如果用存储过程,在数据库里建立存储过程之后,在代码里只需负责直接执行这个存储过程即可,而不用连续多次连接、操作数据库。

一、建立存储过程

建立存储过程有两种方法(因为系统用的数据库为SqlServer2008,所以这里以此为例):
(1)、手动建立存储过程:
对象资源管理器中:数据库→ChargeSystem(数据库名称)→可 编程性→右键“存储过程”→新建存储过程

\
新建的存储过程可以说是一个已经成型的存储过程德模板,我们只需在上面修改一下存储过程名称、参数、执行语句等代码就OK了。

(2)、SQL语句添加存储过程
直接新建查询,在代码编辑窗口编写存储过程SQL代码,基本语法为:
CREATE PROCEDURE PROC_NAME
@[参数名] [类型],@[参数名] [类型]……
AS
BEGIN
[过程体].........
END

用第一种方法建立的存储过程基本上也是这个结构,加入相应的参数和过程体之后,完整的存储过程为:

CREATE PROCEDURE PROC_Register
	-- 定义参数
	@cardNumber varchar(6),@balance decimal(5,1),@type nvarchar(20),@status nvarchar(50),@isChecked nvarchar(10),
	@stuNumber varchar(18),@stuName nvarchar(10),@stuSex varchar(6),@stuMajor nvarchar(30),@stuGrade nvarchar(20),@stuClass nvarchar(20),@comment nvarchar(100),
	@userID varchar(18)
AS
BEGIN
			
        --向表中插入数据
	insert into ChargeSystem .dbo.T_Card(cardNumber ,balance ,type ,stuNumber ,status ,isChecked ) values(@cardNumber ,@balance, @type ,@stuNumber ,@status ,@isChecked )
	insert into ChargeSystem .dbo.T_Student (stuNumber,stuName,stuSex,stuMajor,stuGrade,stuClass  ,comment ) values (@stuNumber ,@stuName ,@stuSex ,@stuMajor ,@stuGrade ,@stuClass,@comment )
	insert into chargesystem.dbo.T_Recharge (userID,cardNumber,rechargeCash ,rechargeDate ,rechargeTime ,isChecked )values(@userID,@cardNumber ,@balance, CONVERT(char(10),getdate(),120),CONVERT(varchar,GETDATE(),108),'未结账')
END
注意:无论是用哪种方式建立的存储过程,都需要点击执行来存到服务器里,才可以通过以后的调用来执行,单纯地保存(ctrl+C)只是把这个存储过程文件保存在本地,而不会存入 数据库服务器中。

当建立好存储过程时,可以新建查询执行“exec 存储过程名 @参数1=值1,@参数2=值2……”来验证存储过程是否正确。

二、代码中调用存储过程

调用存储过程跟执行SQL语句的方式大同小异,需要注意的是,执行SQL语句时,命令对象Command的CommandType的值为CommandType.Text,而执行存储过程时,CommandType的值为CommandType.StoredProcedure。
在本例中具体代码为:

D层代码:

Public Class SqlServerRegisterDAL : Implements IDAL.IRegister
    Public Function Insert(ByVal enCard As Entity.CardEntity, ByVal enStudent As Entity.StudentEntity, ByVal userID As String) As Boolean Implements IDAL.IRegister.Insert
        Dim sqlHelper As New SqlHelper                                 '定义SqlHelper实例
        Dim cmdType As CommandType = CommandType.StoredProcedure       '定义数据库命令类型
        Dim cmdText As String = "PROC_Register"                        '数据库执行字符串
        Dim parameters As SqlParameter()                               '定义参数数组,负责向存储过程中的变量传值
        '为参数数组中的参数一一赋值
        parameters = {New SqlParameter("@c
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇检查行锁等待问题的脚本(单机和r.. 下一篇Hive的日期函数

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C语言中,“指针”用 (2025-12-26 15:20:18)
·在c语言的指针运算中 (2025-12-26 15:20:15)
·C语言-函数指针与函 (2025-12-26 15:20:12)
·求navicat for mysql (2025-12-26 13:21:33)
·有哪位大哥推荐一下m (2025-12-26 13:21:30)