1、中科院寒区旱区环境与工程研究所中科院寒区旱区环境与工程研究所张张 耀耀 南南l问题的提出问题的提出l利用利用ASPASP实现对数据库的共享访问实现对数据库的共享访问 l利用利用COMCOM组件共享分布式异构数据库组件共享分布式异构数据库 l利用利用存储过程提高存储过程提高ASPASP对数据库的共享速对数据库的共享速度度 l利用利用ASPASP实现对共享服务的跟踪实现对共享服务的跟踪l科学数据库事实上是一个数据库群体科学数据库事实上是一个数据库群体l由于数据来源、格式、分类等因素的不同,大由于数据来源、格式、分类等因素的不同,大多为分布式的异构数据库群。多为分布式的异构数据库群。l操作系统各异,
2、对用户来讲,数据库的访问复操作系统各异,对用户来讲,数据库的访问复杂化。杂化。l基于基于InternetInternet的的B/SB/S架构,利用架构,利用ASPASP、COM/COM/DCOMDCOM组件技术,来实现分布式异构数据库群组件技术,来实现分布式异构数据库群的共享服务和数据共享用户的跟踪。的共享服务和数据共享用户的跟踪。l在在ASPASP中,用来存取数据库的对象统称中,用来存取数据库的对象统称ADOADO(Active Data ObjectsActive Data Objects)l主要有主要有ConnectionConnectionRecordset Recordset Com
3、mandCommand三种对象三种对象l其中其中ConnectionConnection负责打开或连接数据负责打开或连接数据库库lRecordsetRecordset负责存取数据表负责存取数据表lCommandCommand负责对数据库执行行动查询(负责对数据库执行行动查询(Action QueryAction Query)命令和)命令和执行执行SQL ServerSQL Server的存储过程(的存储过程(Stored ProcedureStored Procedure)。)。l但但靠这三个对象还是无法存取数据库的,还必须具有数靠这三个对象还是无法存取数据库的,还必须具有数据库存取的驱动程序
4、:据库存取的驱动程序:OLE DBOLE DB和和ODBCODBC驱动程序驱动程序 ADOOLE DBJetSQLOracleJetSQLOracleODBCAccessSQLOracleAccessSQLOracleADO层层OLE DB层层ODBC层层数据存储层数据存储层l首先建立一个首先建立一个ADODB.Connection 接口的对象,接着在这一个对象上接口的对象,接着在这一个对象上绑定相应的数据源(可以用有名数据源和无名数据源),根据需要建绑定相应的数据源(可以用有名数据源和无名数据源),根据需要建立或者不建立记录集,然后在该数据源上链接用执行或打开的方法来立或者不建立记录集,然后
5、在该数据源上链接用执行或打开的方法来对相应的表进行操作对相应的表进行操作。AspAsp访问数据库的一般方法访问数据库的一般方法:l AccessAccess类型的数据库对象类型的数据库对象Dim conn,Provider,DBPathDim conn,Provider,DBPathlSet conn=Server.CreateObjectSet conn=Server.CreateObject(ADODB.Connection)(ADODB.Connection)Provider=Provider=Microsoft.Jet.OLEDB.4.0;Provider=Provider=Micro
6、soft.Jet.OLEDB.4.0;lDBPath=Data Source=&Server.MapPathDBPath=Data Source=&Server.MapPath(数据库文件名数据库文件名)lconn.Open Provider&DBPath conn.Open Provider&DBPath lS e t C r e a t e A c c e s s R e c o r d s e t =S e t C r e a t e A c c e s s R e c o r d s e t =Server.CreateObject(ADODB.RecordsetServer.Crea
7、teObject(ADODB.Recordset)lCreateAccessRecordsetCreateAccessRecordset.Open.Open 数据表名数据表名,connconn,2,2,2,2End FunctionEnd Function l建立建立SQL Server SQL Server 类型的数据库对象类型的数据库对象lDim Params,connDim Params,conn S e t C r e a t S Q L S e r v e r C o n n e c t i o nS e t C r e a t S Q L S e r v e r C o n n e
8、 c t i o n =N o t h i n g=N o t h i n g Set conn=Server.CreateObjectSet conn=Server.CreateObject(“ADODB.Connection”)(“ADODB.Connection”)P a r a m sP a r a m s =“P r o v i d e r=S Q L O L E D B.1”=“P r o v i d e r=S Q L O L E D B.1”Params=ParamsParams=Params&“;Data Source=”&Computer&“;Data Source=”&C
9、omputerParams=Params&“;User ID=”&UserIDParams=Params&“;User ID=”&UserIDParams=ParamsParams=Params&“;Password=”&Password&“;Password=”&PasswordParams=ParamsParams=Params&“.Initial Catalog=”&“.Initial Catalog=”&数据库名称数据库名称 lConn open Paras Conn open Paras S e tS e t C r e a t e S Q L S e r v e r R e c o
10、 r d s e t=C r e a t e S Q L S e r v e r R e c o r d s e t=S e r v e r.C r e a t e O b j e c t(A D O D B.R e c o r d s e tS e r v e r.C r e a t e O b j e c t(A D O D B.R e c o r d s e t )CreateSQLServerRecordset.Open source,connCreateSQLServerRecordset.Open source,conn,2,2,2,2End FunctionEnd Functio
11、nl在在OLE DB OLE DB 下层的下层的ODBCODBC并不是为分布式计算设计的,并不是为分布式计算设计的,ODBCODBC仅适用于关系数据库。仅适用于关系数据库。lWebWeb本身的无状态性、以及大量访问都使得这种靠保本身的无状态性、以及大量访问都使得这种靠保持永久性连接是无法实现。持永久性连接是无法实现。lCOM(Component Object Model)及)及DCOM(Distributed COM)实现了跨网络节点的对象访问)实现了跨网络节点的对象访问能力。能力。lCOM/DCOM也逐渐发展成了也逐渐发展成了Windows系列操作系统系列操作系统的重要组成部分。的重要组成部
12、分。lCOM是建立在是建立在OSF DCE标准的远程方法调用标准的远程方法调用RPC(Remote Procedure Call)基础上的。)基础上的。In-ProcessObjectClientApplicationLocalObjectProxyRemoteObjectProxyIn-Process ServerCOMClient ProcessRPCRPCLocalObjectLocal ServerStubCOMLocal Server ProcessRemoteObjectRemote ServerStubCOMRemote Server ProcessRemote Machinel
13、有了上述对有了上述对WEB管理服务器的定义和设置,可以利用一组管理服务器的定义和设置,可以利用一组COM组件对象来完成通过组件对象来完成通过ASP脚本对分布式异构数据库的访问。脚本对分布式异构数据库的访问。资源组件资源组件文本及二进制节点组文本及二进制节点组件件数据库节点数据库节点文件二进制数组件文件二进制数组件网络共享目录组件网络共享目录组件目录收集组件目录收集组件文件收集组件文件收集组件l对一些处理过程,本身的流程较复杂,使用表格中的数据较多,对一些处理过程,本身的流程较复杂,使用表格中的数据较多,而且要反复的使用表格中的数据,但返回的结果却很少,就特别而且要反复的使用表格中的数据,但返回
14、的结果却很少,就特别适合于使用存储过程。适合于使用存储过程。l存储过程被数据库编译产生一个执行计划,执行速度比对应的存储过程被数据库编译产生一个执行计划,执行速度比对应的SQLSQL语句快。存储过程在数据库服务器端执行且使用的数据不通语句快。存储过程在数据库服务器端执行且使用的数据不通过网络的传输过程,从而提高了访问速度。过网络的传输过程,从而提高了访问速度。l因此可以把某些表的访问封装在存储过程中,然后指定这些表只因此可以把某些表的访问封装在存储过程中,然后指定这些表只能被存储过程访问。这样,既可以提高数据的速度和安全性,也能被存储过程访问。这样,既可以提高数据的速度和安全性,也可以防止一些
15、潜在的危险的可以防止一些潜在的危险的SQLSQL操作。操作。l如如从某结点从某结点n n开始找到最上层的父亲结点,这种经常用到的过程开始找到最上层的父亲结点,这种经常用到的过程可以由存储过程来担当,在网页中重复使用达到共享。可以由存储过程来担当,在网页中重复使用达到共享。l在在ASP中通常使用中通常使用application对象制作在线人员的访问情况。对象制作在线人员的访问情况。首先在首先在global.asa中设置中设置application(“user_online”)(以下简称(以下简称auo),格式为:),格式为:用户姓名用户姓名0用户名用户名0上线时间上线时间0最后刷新时间最后刷新时
16、间0登录登录IP地地址址0,用户姓名用户姓名1用户名用户名1上线时间上线时间1最后刷新时间最后刷新时间1登录登录IP地地址址1l.l将页面分隔为两帧(左右、上下均可以),其中一帧的高度将页面分隔为两帧(左右、上下均可以),其中一帧的高度(或宽度,如果是左右两帧的话)为零。(或宽度,如果是左右两帧的话)为零。l在该隐藏帧中放置一能够自刷新的页面(通过在该隐藏帧中放置一能够自刷新的页面(通过setTimeout函函数来数来reload页面)。页面)。l在该页面的刷新过程中更新并检测用户相关信息:在该页面的刷新过程中更新并检测用户相关信息:l如果该用户的用户名不在如果该用户的用户名不在(instr(
17、auo,&用户名用户名&)0)auo中那么将该用户的信息整理后(设置用户姓名、中那么将该用户的信息整理后(设置用户姓名、用户名、登陆用户名、登陆IP为用户信息,设置登陆时间和最后刷新时间为当为用户信息,设置登陆时间和最后刷新时间为当前时间)添加到前时间)添加到auo的最后(字符串与操作)。的最后(字符串与操作)。l如果该用户的用户名已经存在于如果该用户的用户名已经存在于auo中,那么更新该用户的最中,那么更新该用户的最后刷新时间为当前时间。后刷新时间为当前时间。l计算每个用户的登陆时间与最后刷新时间之间的时间差,如果大计算每个用户的登陆时间与最后刷新时间之间的时间差,如果大于设定值(如:于设定
18、值(如:7秒)则表明该用户已经下线,则可以从秒)则表明该用户已经下线,则可以从auo中中将该用户删除。将该用户删除。l通过上述思路实现了在线访问数据库人员的数量统计、在线人员通过上述思路实现了在线访问数据库人员的数量统计、在线人员的名称显示、在线人员的停留时间显示并按照停留时间排序、禁的名称显示、在线人员的停留时间显示并按照停留时间排序、禁止同一账号同时在不同的机器(止同一账号同时在不同的机器(IP地址)上登录、在线短信息的地址)上登录、在线短信息的发送(增加检索是否与该用户想匹配的信息的程序段即可)。发送(增加检索是否与该用户想匹配的信息的程序段即可)。lASPASP作为一种微软(作为一种微
19、软(MicrosoftMicrosoft公司)基于公司)基于WEBWEB的编程脚本,在的编程脚本,在INTERNETINTERNET环境下有着环境下有着广泛的应用,特别与面向对象的广泛的应用,特别与面向对象的COMCOM组件结组件结合,非常有利于分布式异构数据库在合,非常有利于分布式异构数据库在WEBWEB环环境中的访问,尽管境中的访问,尽管WEBWEB分布式数据库访问的分布式数据库访问的脚本语言颇多,但脚本语言颇多,但ASPASP仍不失为一种有效的选仍不失为一种有效的选择。在采用数据库存储过程技术、择。在采用数据库存储过程技术、利用利用ASPASP脚脚本很好地完成了分布式异构数据库的共享目的本很好地完成了分布式异构数据库的共享目的和数据库共享访问用户的跟踪。和数据库共享访问用户的跟踪。