当前位置:首页 > 嵌入式 > 嵌入式硬件

摘 要: 利用SQL Server作为数据库管理平台开发高校通用计算机在线考试软件系统时,由于数据量较大,最应关注的是软件系统的运行速度、性能和可维护性等指标。如果采用常规的程序设计方案,会造成网络通信数据量大、业务逻辑处理速度慢、系统运行效率低等问题。为解决这些问题,软件系统中相关业务逻辑设计采用存储过程的方法实现,大大减少了网络流量,提高了系统的性能和可维护性。
关键词: SQL Server; 在线考试; 网络流量; 存储过程

随着计算机网络技术和数据库技术的飞速发展,高校的数字化校园建设进程日益深入,其中数字化教学与学习环境建设成为其核心内容。为推动数字化校园建设进程,创建数字化教学环境,利用Delphi7和SQL Server2000开发出适用于多学科的高校通用计算机在线考试软件系统。Delphi在基于C/S模式的数据库应用开发领域具有很强的数据库支持能力,因为它提供了丰富的数据库操作组件,常用的有TQuery、TTable、TADOQuery和TADOTable等[1]。通过这些组件,程序员可以在短时间内完成一个应用程序模块的设计,大大减少了开发人员的工作量。但是,这些组件在操作数据库时却存在局限性,即必须将数据库中的记录从服务器端取出放入到客户端,再根据查询条件进行选择。这种实现方法,如果待访问的数据量较大,势必因为查询时间较长而降低程序执行的速度,从而降低应用程序的性能。解决这一问题利用了SQL Server2000的存储过程来实现[2]。
1 存储过程及其优点
1.1 存储过程的定义
存储过程是存储在服务器上的一组预先定义并编译好的用来实现某种特定功能的SQL语句。它可以接受参数、返回状态值或参数值。存储过程在服务器端执行,通过应用程序调用的方法实现,执行结束后再把结果返回到客户端。
1.2 存储过程的优点
(1)存储过程执行速度快,便于提高系统的性能。由于存储过程在第一次执行之后,其执行规划就储存在高速缓冲存储区中,在以后的操作中。只需从高速缓冲存储区中调用编译好的二进制形式存储过程来执行[3]。
(2)减少网络流量,提高系统执行效率。客户端应用程序调用一个存储过程,只需通过网络发送该过程名和少量入口参数,数据库服务器就可执行该过程,执行完成后,只返回结果状态或将最终结果集给客户端应用程序,无需通过网络传送大量的SQL操作命令和中间结果,最大限度地减少网络通信负担,提高了执行效率。
(3)维护了数据库的安全性。如果用户被授予执行存储过程的权限,即使该用户没有在执行该存储过程中可参考的表或视图的访问权限,该用户也可以完全执行该存储过程而不受影响。因此,可以通过创建存储过程来完成数据的插入、更新和删除等操作,并且可以通过编程方式控制在操作中对信息的访问权限[4]。
(4)提高软件系统的可维护性。存储过程在创建时就在服务器上经过调试和编译,可以避免不必要的错误出现。另外,存储过程将相关业务逻辑封装在一起,可以大大提高整个软件系统的可维护性。因为当相关业务逻辑发生变化时,不需要修改并编译客户端应用程序,只需要修改位于服务器端的实现相应业务逻辑的存储过程即可。
(5)充分增强SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和运算。
基于以上优点,在进行C/S模式数据库应用系统开发时,通常把比较浪费时间、影响网络传送的相关业务逻辑编写成存储过程由服务器执行,同时利用服务器的SQL语法进行优化处理,只将少量的结果显示在客户端,充分提高软件系统的性能[5]。
2 存储过程的创建方法
以SQL Server 2000数据库管理系统为背景,创建方法如下:
CREATE PROC[EDURE]
procedure_name[;number]
[{@parameter data_type}[VARYING][=default] [OUTPUT] ][,...n]
[WITH {RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}]
[FOR REPLICATION]
AS sql_statement [...n ]
下面对语法中各选项进行说明:
(1)选项“procedure_name”指存储过程名,不能超过128个字符,“[;number]”指程序编号,用于区别同名的存储过程。
(2)选项“@parameter”表示参数,每个存储过程中最多可以设定1 024个参数,要求在每个参数名前加上符号“@”。
(3)选项“[=default]”指为对应参数设定默认值。
(4)选项“OUTPUT”用来指定参数既有输入又有输出。即在调用这个存储过程时,如果所指定的参数是要输入的参数,同时也需要在结果中输出,则该项必须为“OUTPUT”。
(5)选项“WITH”用来指定存储过程的处理方式。
(6)选项“FOR REPLICATION”表示只能由复制方式执行[6]。
3 存储过程在考试软件系统中的应用
(1)考试系统在运行时要经过三个步骤,考生抽取套题编号、抽取套题内容和将套题内容插入答题表进行答题。如果不采用存储过程,则需用下面方法实现。
①随机抽取套题编号
select 套题编号from tblcrecord order by newid()
②抽取对应套题内容,套题编号存储在dm.strNum中
with qry1 do
Begin
Close ;
SQL.Clear ;
SQL.Add(′Select * from tblTK Where 套题编号
='''+dm.strNum +''');
Open ;
End;
③插入考试题到考试表tblKS中
qry1.First;
While not qry1.Eof Do
begin
qry2.Append;
qry2.FieldByName(‘考生学号’).Value:= qry1.Field-
ByName(‘考生学号’).Value;

qry2.Post;
end;
显然,此种方法步骤繁琐,耗时较多,在考试过程中会产生抽题缓慢的现象,系统性能严重降低。为避免此种情况的发生,考试系统采用了存储过程的方法,代码如下[7]:
CREATE PROCEDURE cp_Paper_Add
@MyNo char(10),
@Mynum char(20)
AS
set nocount on
exec(′insert into tblKS (学生学号、套题编号、试题序号、试题内容、试题答案、试题分数、是否答题、套题名称、考试科目、试题类型、学生分数、类别序号) select''''+@MyNo+'''',''''+@Mynum+''',试题序号,试题内容,试题答案,试题分数,“否”,套题名称,科目名称,试题类型,0,类别序号 from tblTK where 套题编号='''+@Mynum+''' )
GO
通过执行存储过程,将题库中与考生抽取套题编号相匹配的记录提取出来,并批量插入到考试表中,同时对考生分数进行了初始化为0的动作。而本考试系统就是将考生的学号和考生抽取的套题编号作为参数传递给存储过程,因此,大幅度提高了考试软件的效率。
(2)在考试系统进行不同类型题目抽取时,如果在Delphi中直接应用SQL语句,应使用下面代码:
with cds1 do
Begin
Close ;
SQL.Clear ;
SQL.Add(′Select * from tblKS Where 学生学号=′);
SQL.Add(‘ ?苁+dm.strNo +?苁 and 试题类型=′′单项选择题′′ order by 试题序号′);
Open ;
End;
此时,程序是在运行时才编译的。这样就增加了运行的时间,同时还要把完整的SQL语句传递给Sql Server服务器执行,这样考试过程中势必增加网络流量,降低软件的运行效率。
如果采用存储过程,可用下面方法实现:
CREATE PROCEDURE sp_Query_All
@strNo char(10)
AS
set nocount on
Select Select * from tblKS Where 学生学号=@strNO and 试题类型=′′单项选择题′′ order by 试题序号
GO
在客户端调用方法如下:
with cds1 do
Begin
Close ;
SQL.Clear ;
SQL.Add('exec sp_Query_All :strNO');

Params.ParamByName('strNO').Value:=DM.strNO;
  Open ;
  End;
此时,存储过程是预先编译的,自然节省了编译的时间,同时只向服务器传递了一个参数DM.strNO,大大减少了网络流量,提高了考试系统的性能。
(3)在考试系统中添加考生信息时,首先要判断是否存在该考生学号信息,然后再进行添加操作。如果采用普通SQL语句,代码如下:
with qry1 do
Begin
Close ;
SQL.Clear ;
SQL.Add(′select * from tblstudents where考生学号=
:strNO′);
Params.ParamByName('strNO').Value :=DM.strNO;
Open ;
if recordcount=0 then
begin
qry2.Append;
qry2.FieldByName(‘考生学号’).Value:= DM.strNO;

qry2.Post;
End;

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

电解电容作为电子电路中的重要元件,其性能的好坏直接影响到整个电路的正常运行。因此,正确地测量电解电容的好坏对于保证电路的稳定性和可靠性至关重要。本文将详细介绍电解电容的测量方法,帮助读者了解如何准确地判断电解电容的好坏。

关键字: 电解电容 电子电路 性能

投入式液位计是一种常用的液位测量仪表,具有结构简单、安装方便、测量准确等特点。它通过测量液柱产生的静压力来间接测量液位高度,广泛应用于各种液体储罐、管道、水池等的液位测量。本文将详细介绍投入式液位计的使用说明。

关键字: 投入式液位计 液位测量仪表 性能

随着科技的飞速发展,嵌入式系统已经广泛应用于各个领域,如家用电器、工业机器人、医疗设备、汽车等。嵌入式系统具有低功耗、低成本、高可靠性等优点,因此受到越来越多的关注。嵌入式系统的核心是处理器,处理器的性能直接影响到嵌入式...

关键字: 嵌入式 处理器 性能

上海2023年9月20日 /美通社/ -- 2023年9月19日-23日,第二十三届中国国际工业博览会(以下简称“工博会”)在国家会展中心(上海)举行,来自全球30个国家和地区的2800家展商,覆盖从基础材料、基础零部件...

关键字: 富士 存储技术 IBM 数据流

摘要:采用.Mg-Y2g3作为烧结助剂,利用光固化成形技术、结合气压烧结方法制备了高致密化程度和高性能的si3N4陶瓷。研究了.Mg-Y2g3烧结助剂总掺量对光固化成形si3N4陶瓷的相对密度、物相组成、显微结构、热学和...

关键字: 光固化成形 显微结构 性能

整流变压器与一般电力变压器的结构、性能、内部接线有很大区别,其容量表示方法在铭牌上也多种多样,有的铭牌上有额定容量,有的还注明形式容量、平均容量,有的注明多挡不同含义。整流变压器是一种用于将交流电转换为直流电的装置,通常...

关键字: 整流变压器 容量 性能

目前市场上,CPU主要是intel和AMD两大阵营,其中intel市场份额最大,也是CPU界龙头老大,自从AMD推出锐龙处理器之后,各项性能指标开始标上Intel平台,并且走性价比路线,如今相比intel平台差距在不断缩...

关键字: CPU 处理器 性能

虽然现在很多人表示,手机芯片性能已过剩,买手机不用管芯片,只要觉得好用,价格合适就行,买就是了,所以根本就不用管什么参数等。但手机芯片依然是最重要的核心部件,手机芯片档次就注定了一台手机的基础能力,所以了解手机芯片,依然...

关键字: 手机 芯片 性能

采用针脚式接口对应到主板上就有相应的插槽类型。CPU接口类型不同,在插孔数、体积、形状都有变化,不能互相接插。

关键字: CPU 针脚 性能

12月2日消息,日前,安兔兔公布了11月安卓旗舰手机性能排行,得益于换代的优势,天玑9200新旗舰登顶榜首,力压一众骁龙8+手机,成为目前安卓天花板。

关键字: 安兔兔 手机 性能
关闭
关闭