夏 沅
一、引言
随着人民银行中心支行计算机网络建设的逐步发展和内联网二期工程的落实到位,多数中心支行已建立了内部网络(Intranet),提供文件传输、电子邮件、及简单WEB等相关网络服务。
对于人民银行中心支行而言,网站的建设需要报表、台帐等各种数字信息,报告、分析等各种文字信息,公文处理、会议通知等各种办公自动化信息,声音、图象、视频会议等各种多媒体信息。而如何充分利用现有信息资源和计算机网络技术,建设人民银行内部的信息网站,为金融监管和政策给予及时、准确、多样的信息服务,很大程度上离不开数据库的支持。同时,人民银行网站的建设是一项系统工程和标志性工程,它代表一个行的形象,体现科技兴行的精神。建设和维护网站涉及的部门众多,需要协调的关系很多,技术复杂程度高,这就迫切需要利用数据库技术建设一个动态的、交互的、高效的网站来满足信息化时代的要求。
数据库存储过程(Stored-Procedure)是诸如SYBASE、ORACLE、INFORMIX、MICROSOFT SQLSERVER等大型数据库一种成熟的技术,是由一些或多个SQL语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序调用,也可以从另一个过程或触发器调用。通过使用变量和条件,它的参数可以被传递和返回。在B/S(浏览器/服务器)模式中,网站的客户端在执行复杂的任务,处理大而复杂的SQL语句时,存储过程提供了诸多方便之处和优点,能够满足网站建设的需要。
二、采用存储过程的优点
1、运行速度加快
在网站数据库服务器中,一般交互式的SQL命令,每次执行前数据库服务器都要为其建立预编译的过程,而存储过程在第一次执行之后,经过了优化和编译好的过程,储存在高速缓存之中,在接下来的运行中可以直接从高速缓存中执行,省去了以后执行的优化和编译阶段,节省了执行过程的大量时间,使用存储过程从而加快了执行速度。
2、网络负荷减少
当客户端发出执行存储过程的请求时,只有执行存储过程的命令在内部网络上传送,当它们到达数据库服务器时,运行存储过程,客户端在网上只接收返回结果或状态信息,所以使得客户机与服务器的通讯量降至最小,大大减少了网络负荷。缩短了用户要求的相应时间,避免了用户枯燥的等待。
3、团队开发方便
网站程序编制过程中,PHP、ASP等调用存储过程能够减少在程序开发中构造复杂SQL语句的难度,由于存储过程的可重用、可共享性,使得存储过程可被多处重复使用,也可以被多个用户共享,在开发中反复使用,给网站的团队开发带来了极大的方便,而且使站点更易于维护和更新。
4、安全机制放心
存储过程本身有很强的安全机制,只有具有相应的系统权限才能够调用相应的存储过程,或者只访问存储过程而不能够访问其中涉及的表或视图,只通过存储过程中所给出的功能来间接操作数据库。在存储过程的代码中可以包含对信息和数据的合法性检查、对业务规则要求的各种完整性检查等,这无疑给那些安全性较差的网站平台带来了福音。
5、服务用户满意
存储过程可以充分利用数据视点集中的原则,使用户把注意力集中在所关心的数据上、简化用户的数据查询操作、使不同的用户能够多角度“看待”同一数据,能够用存储过程建立非常复杂的查询,以非常复杂的方式更新(update、delete、select、insert)数据库。同时存储过程能够自动对复杂或敏感的事务处理,对某些表进行各种处理,可以保证这些表的数据完整性。这样做,满意了用户。
三、调用存储过程的方法
下面以某中心支行金融信息港用户信息发布登录模块为例,结合实际开发工作中的一些经验说明如何调用存储过程
1、网站平台服务器端为WinNT4.0、SERVERPACK5、IIS5.0,ASP应用程序,MS SQL SERVER7.0为后台数据库
2、相关表Department中保存了单位号(Dep_id)单位名称(Dep_name)和密码(Dep_passwd)。
3、实现功能用户从下拉菜单中选择用户名称,输入密码,登录。如果有单位用户拥有指定的密码,输出参数将返回“pass",否则,返回“Invalid"。
4、实例说明
(1)存储过程sp_CheckPwd,检查用户是否输入了合法的密码,建立存储过程,可以从Microsoft SQL Sever程序组中启动ISQL/w。然后,在查询窗口中输入存储过程。
(2)用户登录界面login.asp,使用通常的SQL语句和使用存储过程进行对比。
(3)检验密码是否正确Checklogin.asp,在其中,使用定义的存储过程。
(4)数据库连接文件conn.asp
5、实例
(1)/*存储过程实例*/
CREATE PROCEDURE sp_CheckPwd
@CHKDepid VARCHAR(30),@CHKPass VARCHAR(30),
@ISValid CHAR(8) OUTPUT
AS
IF EXISTS(SELECT Dep_id FROM Department
WHERE Dep_id=@CHKDepid AND Dep_passwd=@CHKPass)
SELECT @ISVaid="pass"
ELSE
SELECT @ISValid="Invalid"
/*存储过程接收两个输入参数。输入参数@CHKDepid向存储过程传递一个单位ID号。@CHKPass向存储过程传递一个单位用户密码。如果表中存在这个单位ID号和密码组合,则输出参数将返回“pass",否则,返回“Invalid" */
(2)//login.asp
// 用户登录界面
<!--#include file="conn.asp"-->
'包含数据库连接定义的文件
<html>
<head><title>单位用户登录</title></head>
<body>
<%
dim rs,dept_sql
set rs=server.createobject("adodb.recordset")
'创建记录集
dept_sql="select dep_id,dep_name from Department "
'使用标准SQL语句,将所有的单位ID号和单位用户的名称取回到客户端
rs.open dept_sql,conn,1,1
%>
<form method="post" action="chklogin.asp" name="frmNewDepartment">
单位用户名:
<select name=" DepartmentId " size="1">
<%
do while not rs.eof
response.write"<option value='"+cstr(rs("dep_id"))+"'>"+rs("dep_name")+"</option>"+chr(13)+chr(10)
rs.movenext
loop
%>
'建立列表对象,显示单位名称,返回单位ID值
</select>
密 码:
<input type="password" name=" DepartmentUserPwd ">
<input type="submit" name="Submit1" value="确定">
<input type="reset" name="Submit2" value="重写">
</form>
</body>
</html>
(3)//Checklogin.asp
//检验登录的单位用户的合法性,返回值。同时调用存储过程sp_CheckPwd
<!--#include file="conn.asp"-->
'包含数据库连接定义的文件
< %
Set cmdTemp=Sever.CreateObject("ADODB.Command")
'建立命令对象
Set cmdTemp.ActiveConnection=Conn
'把命令和打开的连接联系起来
cmdTemp.CommandType=adCMdStoredProc
'指定要执行的是一个存储过程
cmdTemp.CommandText="sp_CheckPwd"
'引用存储过程指定名称
Set tmpFirstParam =cmdTemp.CreateParameter
("DepartmentUserPwd",adVarChar,adParamInput,30)
'创建输入参数对象,命令对象的CreateParameter()方法建立输入参数,同理可以建立输入参数对象DepartmentId,对象的方法带有四个参数,需要注意区别
Set tmpThirdParam=cmdTemp.CreateParameter
("RetValue",adChar,adParamOutput,8)
'创建返回参数对象
cmdTemp.Parameters.Append.tmpFirstParam
'把第一个参数追加到参数集合中,同理依次追加其他参数到集合中
cmdTemp("DepartmentId ")=Request.FORM("DepartmentId ")
'取得输入参数,从请求的login.asp的 FORM中获得
cmdTemp("DepartmentUserPwd ")=Request.FORM("DepartmentUserPwd ")
cmdTemp.Execute
'调用Execute方法执行存储过程
% >
The Check Result is < %=cmdTemp("RetValue")% >
'输出返回值,这是最为简单的应用,在实际中可以根据需求,进行相应开发
< %
DataConn.Close
'关闭数据库连接
% >
(4)//conn.asp
//数据库连接定义文件
<%
dim conn
dim connstr
set conn=server.createobject("ADODB.CONNECTION")
'建立连接对象
connstr="driver={SQL Server};server=xx.xxx.xx.xx;uid=fzxxg_user;pwd=;database=fzxxg"
'与数据库建立连接,服务器的IP地址,用户名称fzxxg_user,口令为空,数据库名称为fzxxg
conn.open connstr
%>
四、结束语
人民银行网站的建设为新世纪的银行业带来了巨大的发展机遇并提供了广阔的舞台,Intranet在我们的社会中将扮演多种角色,各种Intranet的技术将备受关注。本文中,调用数据库存储过程可以建立一个交互式的、高效率的网站,是一种实用技术。但它只是网站建设技术的冰山一角,相信以TCP/IP协议作为基础,以WEB为核心应用,以后台数据库为支持模型的大型复杂高效率的站点建设是发展趋势和必然。
……