摘要:存储过程是数据库端执行的一组T-SQL语句的集合。网上商城系统具有大量的用户交互的特点,系统性能十分重要。文章介绍了网上商城系统的主要功能及数据库设计,具体阐述了存储过程在该系统开发中的应用。实践结果表明,使用存储过程能够提高系统运行的效率,增强系统的安全性。
关键词:存储过程;网上商城;安全性;SQLServer
中图分类号:TP311文献标志码:A文章编号:1006-8228(2013)09-31-03
0引言
目前国内B2C行业正处于高速成长期,市场的进一步扩张为传统企业电子商务化提供了一个发展的平台,建立自己的B2C网上商城正成为未来中小企业进行网上开拓市场的渠道选择[1]。网上商城系统与一般网站的主要区别之一是系统要求更多的交互,更安全地进行数据存储和交换,因此网站的运行效率及安全性是网站设计的关键。存储过程是数据库管理系统中一类常用的数据库对象,具有可模块化编程、执行效率高、可减轻网络负载及访问安全可靠等特点。在网上商城系统中使用该对象,可以提高网站的访问速度和安全性,为用户提供更好的购物体验。
1网上商城系统
1.1网上商城系统的基本功能
网上商城系统要为用户建立一个动态的、便捷的、交互性的网络购物环境,实际上是一个B/S结构的信息系统[2]。它主要有两类用户,即普通用户和管理员。整个系统可以分为前台和后台两个部分,前台主要是面向普通用户的,主要由商品浏览、商品查询、购物车、会员管理等模块组成,后台是面向管理员的,主要包括登录管理、商品管理、会员管理、订单管理、公告管理等模块构成。后台功能模块如图1所示。
1.2网上商城系统的逻辑体系设计
网上商城系统采用MicrosoftVisualStudio2010开发,后台数据库采用SQLServer2008。该系统使用三层体系结构,整个系统分为表示层、业务逻辑层、数据访问层,如图2所示。该系统的数据访问层实现时调用了事先在数据库后台编制的各类存储过程,从而提高了系统的运行效率,保证了系统的安全性。
1.3网上商城系统的数据库设计
根据系统的功能需求,设计出了以下数据库关系模式:
⑴商品信息(商品编号,类别编号,商品名称,商品介绍,进货价格,商品图片,进货日期,备注);
⑵商品类别(类别编号,类别名称);
⑶订单信息(订单编号,用户名,付款方式,运送方式,订货日期,是否执行,备注);
⑷订单明细(订单明细编号,订单编号,商品编号,价格,数量);
⑸会员信息(会员编号,用户名,密码,真实姓名,地址,邮政编码,电话,电子邮件);
⑹管理员(用户编号,用户名,密码)。
2存储过程及其优点
存储过程是一种重要的数据库对象,是为了实现某种特定的功能,将一组预编译的SQL语句以存储单元的形式存储在服务器上,供用户调用[3]。存储过程可以带输入参数、输出参数,具有返回值。SQLServer支持五种类型的存储过程,分别是:系统存储过程、本地存储过程、临时存储过程、远程存储过程和扩展存储过程。
存储过程具有以下优点。
⑴执行效率高存储过程在创建时就经过了语法检查和性能优化,因此在执行时不必再重复这些步骤。存储过程第一次调用后,就驻留在内存中,不必再经过编译和优化,所以执行速度很快。
⑵提高软件系统的可维护性存储过程将相关业务逻辑封装在一起,只要创建一次,便可多次调用。用户可以独立于应用程序而对存储过程进行修改[4]。
⑶降低网络流量存储过程位于服务器上,调用的时候只需要传递存储过程的名称和参数,因此降低了网络传输的数据量[5]。
⑷保证系统的安全存储过程可以避免用户在应用程序中直接嵌入SQL语句,防止SQL注入攻击;可以在数据库内分别设置各个存储过程的安全保护[6],即为存储过程设置一定的调用权限,从而避免用户越权访问,保证信息系统的安全。
3存储过程在网上商城系统中的应用
3.1网上商城系统中的部分存储过程
SQLServer中创建存储过程时需要指定存储过程的名称、输入参数、输出参数等,在网上商城系统中,服务器端创建了实现登录验证、数据操作(增、删、改、查)、数据分页等存储过程,大大提高了应用程序访问数据库的效率,具体如下。
3.1.1实现登录验证的存储过程
登录存储过程proc_Login主要用来验证用户名和密码的合法性。基于存储过程的优点,可以运用它实现登录功能从而防御SQL的注入攻击,提高系统的安全性。另外,可以使用“WITHENCRYPTION”语句对存储过程的创建过程进行加密,具体代码如下。
CREATEPROCproc_Login
@UserNameVARCHAR(20),--输入参数用户名
@PwdVARCHAR(20),--输入参数密码
@ReturnBITOUTPUT--输出参数,登录结果
WITHENCRYPTION
AS
BEGIN
IFEXISTS(SELECTCOUNT(*)
FROMAdmin
WHEREUserName=@UserNameANDPwd=@Pwd)
SET@Return=1--验证成功
ELSE
SET@Return=0--验证失败
END
3.1.2增加商品的存储过程
网上商城系统中包括许多对数据表进行增加、删除、修改或查询的操作,这些都可以使用存储过程来实现,从而提高系统的可维护性。这里以增加商品来展示此类存储过程的实现,其他功能只需将存储过程中的INSERT语句改成相应功能的语句即可。下面的存储过程共包括七个输入参数,主要功能是实现商品信息的添加,具体代码如下。
CREATEPROCEDUREproc_InsertProduct
@typeIDINT,--类别编号
@goodsNameVARCHAR(200),--商品名称
@introduceTEXT,--商品介绍
@priceFLOAT,--进货价格
@pictureVARCHAR(100),--商品图片
@INTimeDATETIME,--进货日期
@remarksTEXT--备注
AS
BEGIN
INSERTINTOproduct
(typeID,goodsName,introduce,price,picture,INTime,remarks)
VALUES
(@typeID,@goodsName,@introduce,@price,@picture,
@INTime,@remarks)
END
3.1.3实现分页的存储过程
经典的数据分页方法是ADO记录集分页法,也就是利用ADO自带的分页功能来实现分页,但这种分页方法仅适用于数据量较小的情形,而不适合网上商城这类系统。由于存储过程是事先编译好的SQL语句,它的执行效率要比通过Web页面传来的SQL语句的执行效率要高,因此在数据库端编写实现分页的存储过程很有必要,可以使用户有较好的访问体验。实现通用的分页功能,存储过程设计时可以包括数据表名、需要返回的列、排序的字段名、页尺寸、页码、返回的记录总数等多个输入参数,由于本文篇幅有限,代码此处就不列出了。
3.2存储过程在.NET程序中的调用
.NET程序中要访问数据库及数据库对象,首先,要定义ADO.NET的SqlConnection对象,并利用该对象打开与数据库的连接;其次,需要创建一个SqlCommand对象,并指定该对象的类型为存储过程;如果该存储过程有输入参数或者输出参数,还需要依次在command对象的Parameters集合中通过Add()方法逐个添加参数,并将参数的值传入或传出;然后,通过Command对象的ExecuteNonQurey()、ExecuteReader()、ExecuteScalar()等方法调用存储过程,将增加、删除、修改的数据插入到数据库中,或者是将数据返回到.NET程序中;最后,关闭数据库连接。下面以增加商品的存储过程proc_InsertProduct为例,列出其在.NET中编写的关键代码:
//创建与数据库的连接
stringconnString="DataSource=.;InitialCatalog=test;
UserId=Admin;Pwd=admin";
SqlConnectionconn=newSqlConnection(connString);
try
{stringsql="proc_InsertProduct";
//打开数据库连接
conn.Open();
//创建SqlCommand对象,并指定其类型是存储过程
SqlCommandcommand=newSqlCommand(sql,conn);
command.CommandType=CommandType.StoredProcedure;
//逐一添加输入参数,商品类别、商品名称等
command.Parameters.Add("@typeID",SqlDbType.Int);
command.Parameters["@typeID"].Value
=Convert.ToInt16(txtTypeID.Text);
command.Parameters.Add("@goodsName",SqlDbType.VarChar);
command.Parameters["@goodsName"].Value
=txtgoodsName.Text;
……字段较多,此处不一一列出
command.Parameters.Add("@remarks",SqlDbType.Text);
command.Parameters["@remarks"].Value=txtremarks.Text;
//可调用Sqlcommand的不同方法来执行查询或者是增、删、改的动作
command.ExecuteNonQuery();
stringmessage="";
……根据返回值判断操作是否成功,此处略
MessageBox.Show(message);
}
catch(Exceptionex)
{MessageBox.Show("系统发生错误");
}
finally
{//关闭数据库连接
conn.Close();
}
4结束语
数据库应用系统开发中,将易于变化或进行数据库处理的功能用存储过程编写,可以给开发及后期的软件维护带来诸多方便。但是存储过程的使用不当也会增加服务器的负担,因此需要结合实际工作合理使用。笔者在网上商城系统的开发过程中充分利用了SQLServer存储过程,不仅大大减少了程序开发的工作量,而且提高了系统的性能和稳定性。
作者:吴伶琳
参考文献:
[1] 李俊.基于Asp.net的B2C电子商务系统设计与实现[D].重庆大学硕士学位论文,2012.
[2] 欧阳昉.网上商城购物系统研究与开发[D].电子科技大学硕士学位论文,2007.
[3] 吴伶琳,杨正校.SQL Server 2005数据库基础[M].大连理工大学出版社,2010.
[4] 李春芬,吴英斌.存储过程在勘探设备管理系统中的应用[J].物探装备,2011.21(5):327-330
[5] 陈晓丹,王娟.存储过程在信息发布系统中的研究与应用[J].武汉工程职业技术学院学报,2010.22(2):36-38
[6] 张小波,成良玉.vs.net中存储过程使用方法研究[J].计算机应用,2004.24(2):138-140