摘要:本文以作者自己开发的办公系统《教师工作手册》网络版为例,以实际的程序源代码,详细论述在程序开发中如何应用存储过程来降低程序的复杂度,提高程序的可读性、通用性,以利于团队开发应用程序,同时提高程序的可移植性。
关键词:存储过程、办公平台、教学管理
数字化《教师工作手册》在学校的应用已有8年的时间,根据实际情况,今年对该应用进行了优化调整,并将数据库中的存储过程应用到了这次优化调整中,从而提高应用的稳定性和实用性。
1、存储过程
SQL Server是我们日常网站开发中比较常用的数据库平台,其中的存储过程类可以完成众多SQL语句集合,经编译后存储在数据库中,在应用程序端通过指定存储过程的名称并给出参数来执行。当存储过程执行一次后,可以将语句、查询数据缓存,在下次执行时直接使用,提高系统的速度和性能。
存储过程在存储在数据库中,运行速度要比单个的SQL语句块快,在调用时只需要提供存储过程名和必要的参数信息,在一定程度上提高系统效率。开发人员可以随时进行修改,对应用程序源代码没有影响,从而提高了程序的可移植性。
2、教师已有手册的查询
当教师登陆系统以后,首先要在系统中选择已有的工作手册,或者新建手册,然后对选择的工作手册进行一定的操作,系统中已存有大量工作手册,可以应用存储过程来查询工作手册,提高系统运行速度和效率。
存储过程:
PROCEDURE [dbo].[JSSC_Select]
@ID varchar(10),
@TypeID integer
AS
BEGIN
--查询某个教师的工作手册列表,ID是用户编号
if (@TypeID=0) SELECT [Code],[School],[UserID],[Niandu],[Xueqi],[Grade],[XueKe],[SC_Name],[Lock],[enabled] FROM [jssc_base] where [UserID]=@ID order by [Xueqi] desc
--查询某个工作手册的信息,ID是工作手册编号
if (@TypeID=1) SELECT [Code],[School],[UserID],[Niandu],[Xueqi],[Grade],[XueKe],[SC_Name],[Lock],[enabled] FROM [jssc_base] where [code]=@ID
--由于篇幅,省略部分语句
END
调用程序:
protected void QueryManual()
{
DataSet ds = new DataSet();
SqlParameter[] inP = { new SqlParameter(), new SqlParameter() };
inP[0].ParameterName = "@ID";
inP[0].SqlDbType = SqlDbType.Text;
inP[0].Value = Session["Userid"].ToString();
inP[1].ParameterName = "@TypeID";
inP[1].SqlDbType = SqlDbType.Int;
inP[1].Value = 0;
int retErrorVal = Connection.ExecuteStoredProcDS("JSSC_Select", inP, ds);
//在此查询得到教师已有手册的相关数据,通过数据集ds返回,在后续的程序中应用相关数据,… …
}
3、教师工作手册的建立
在创建工作手册的时候,涉及到很多工作表,这些工作表可以先在数据库系统中建立视图,在编写存储过程时操作视图,不直接操作具体工作表,从而降低SQL语句的复杂度,提高存储过程的编程效率。
存储过程:
PROCEDURE [dbo].[JSSC_Insert]
@UserID varchar(10),
@XueQi varchar(10),
@Nianji varchar(10),
@XueKe varchar(10),
@School varchar(10),
@SC_Name varchar(20)
AS
BEGIN
declare @Niandu varchar(10)
declare @RN integer
declare @SCID varchar(10)
if (len(@XueQi)>4) SELECT @Niandu=LEFT(@XueQi,4)
if (len(@School)>3 and len(@XueKe)>3 and len(@Nianji)>3 and len(@Niandu)>3)
begin
SELECT @RN= count(*) FROM [jssc_base] where ([School]= @School and [UserID]= @UserID and [Niandu]= @Niandu and [Xueqi]= @XueQi and [Grade]= @Nianji and [XueKe]= @XueKe)
if (@RN=0)
begin
INSERT INTO [jssc_base]([School], [UserID], [Niandu], [Xueqi], [Grade], [XueKe], [SC_Name]) VALUES (@School, @UserID, @Niandu, @XueQi, @Nianji, @XueKe, @SC_Name)
SELECT top 1 @SCID=code FROM [jssc_base] where ([School]= @School and [UserID]= @UserID and [Niandu]= @Niandu and [Xueqi]= @XueQi and [Grade]= @Nianji and [XueKe]= @XueKe)
INSERT INTO [jssc_data] ([Code]) VALUES (@SCID)
end
SELECT code FROM [jssc_base] where ([School]= @School and [UserID]= @UserID and [Niandu]= @Niandu and [Xueqi]= @XueQi and [Grade]= @Nianji and [XueKe]= @XueKe)
end
else
SELECT code='0'
END
此存储过程正常执行后,还返回新建立的手册的ID号,以便开发程序时在程序中利用此手册ID进行相关的操作。
4、存储过程对应用的影响
应用存储过程方便进行模块化编程,数据库和网站程序进行独立开发,可以提高系统开发的能力,对于大型的系统应用,存储过程的应用可以提高开发的效率,同时也促使系统开发的模块化,提高了程序调试、优化效率。
应用存储过程,也将学校基础数据库的建立和维护变得独立,为各应用子系统的开发提供了基础平台,提高应用子系统的开发效率,加快应用子系统的开发进程。
参考文献:
[1] 郑阿奇、刘启芬、顾韵华,2019:《SQL Server 2016 数据库教程》,人民邮电出版社。
[2] 赵洛育,2017:《SQL Server 从入门到精通》,清华大学出版社。
作者简介:
伍自鹏(1969.2-),男,汉族,云南省昭通市,昆明市第三中学,本科学历,中学高级教师,研究方向:校园信息化