Download presentation
Presentation is loading. Please wait.
1
Web数据库技术 Web技术与数据库技术相结合 冯天宇
2
主要内容 Web概述 Web数据库概述 Web数据库访问技术 脚本程序与数据库的接口 B2C商务网站数据库实例
3
Web概述 Web及其工作模式 Web即万维网,就是通过使用通讯设备和线路,将处在不同地理位置、操作上相对独立的多个计算机连接起来,再配置一定的系统软件和应用软件,在这些计算机上实现软硬件的资源共享和信息传递,由此而构成的计算机网络。
4
互联网是由全球众多的计算机局域网互相连接组成的一个超大规模的网络系统,在这个系统中运行着多种应用系统,如上网使用的网页浏览系统——WWW、上传与下载用的文件传输系统——FTP、收发电子邮件所使用的电子邮件系统—— 等。互联网中运行的每一种应用系统都是由互联网中相应的服务器系统、客户机系统构成,也就是说互联网从物理连接来看是由众多的计算机组成,而从逻辑上看是由多个功能子网组成。
5
Web中存储信息的方式 传统网站存储信息的方式是采用基于文件的,即每个Web文档存储在一个单独的文件中。 目前流行的Web存储信息的方式则是基于数据库的,即允许Web直接访问数据库,从而管理动态Web内容。
6
基于HTML文件的Web服务器 Page1.htm Page2.htm Page1.htm HTTP请求 HTTP回应 服务器端 客户端
文本和其他多媒体信息都是以文件的形式来进行存储和管理 客户端直接下载HTML文件。 Page1.htm Page2.htm Page1.htm HTTP请求 HTTP回应 服务器端 客户端
7
基于数据库的Web服务器 SQL HTTP请求 (表单) 数据库 SQL HTTP回应 (数据库数据) ODBC 服务器端 客户端
文本和其他多媒体信息保存在数据库中; 客户端请求服务器执行一个CGI程序或Script语言码。 SQL HTTP请求 (表单) 数据库 SQL HTTP回应 (数据库数据) ODBC 服务器端 客户端
8
Web数据库概述 Web数据库的概念 数据库是指按照一定的结构和规则组织起来的相关数据的集合,是存放数据的“仓库”,据此将网络数据库定义为以后台数据库为基础的,加上一定的前台程序,通过浏览器完成数据存储、查询等操作的系统。
9
数据库技术是计算机处理与存储数据的最有效、最成功的技术,而计算机网络的特点是资源共享,因此数据与资源共享这两种技术的结合即成为今天广泛应用的Web数据库(也叫网络数据库)。
一个Web数据库就是用户利用浏览器作为输入接口,输入所需要的数据,浏览器将这些数据传送给网站,而网站再对这些数据进行处理,例如,将数据存入后台数据库,或者对后台数据库进行查询操作等,最后网站将操作结果传回给浏览器,通过浏览器将结果告知用户。网站上的后台数据库就是Web数据库。
10
通常,Web数据库的环境由硬件元素和软件元素组成。硬件元素包括Web服务器、客户机、数据库服务器、网络。软件元素包括客户端必须有能够解释执行HTML代码的浏览器(如IE,Netscape等);在Web服务器中,必须具有能执行可以自动生成HTML代码的程序的功能,如ASP,CGI等;具有能自动完成数据操作指令的数据库系统,如Access,SQL Server等。
11
Web数据库系统的基本模型 早期Internet数据库系统 多层结构的Web数据库系统模型 客户端浏览器 Web服务器、数据库 客户端浏览器
中间件是位于操作系统和分布应用之间的具有标准协议和程序接口的通用服务,管理计算资源和网络通信。中间件的例子包括目录服务、消息传递机制、对象请求代理、远程过程调用 (RPC) 服务和数据库网关。 多层结构的Web数据库系统模型 客户端浏览器 Web服务器 CGI、ODBC等中间件 数据库服务器
12
三层设计与两层设计的比较 瘦客户降低了对硬件设备的需求。
由于业务逻辑从许多终端用户移到了单一的应用服务器上,这使得应用程序的维护可以集中进行,这消除了传统两层客户—服务器模型中重点关注的软件分布问题。 模块化特性使得更容易修改或替换其中一层而不影响其他层。 核心业务逻辑和数据库功能的分离使得负载平衡更容易进行。 三层体系结构更容易映射到Web环境,Web浏览器可作为瘦客户,Web服务器可以作为应用服务器。
13
Web—DBMS方案的优缺点 使用DBMS带来的优点 简单性 平台无关性 图形用户界面 标准化 跨平台支持 透明的网络访问 可伸缩的配置
新技术 缺乏可靠性 安全性问题 费用昂贵 可伸缩性差 HTML的功能有限 无状态 带宽 性能不足 开发工具不完善
14
几种常用Web数据库的比较 当前比较流行的Web数据库主要有:SQL Server、MySQL和Oracle。这3种数据库适应性强,性能优异,容易使用,在国内得到了广泛的应用 1.SQL Server 是微软公司从Sysbase获得基本部件的使用许可后开发出的一种关系型数据库。目前最新的版本是SQL Server 2000,但SQL Server 7.0仍在广泛使用。
15
由于均出自微软之手,使得SQL Server和Windows、IIS等产品有着天然的联系。事实上以Windows为核心的几乎所有微软的软件产品都采用了一致的开发策略,包括界面技术、面向对象技术、组件技术等,这样在微软的软件中很多都可以相互调用,而且配合得非常密切。因此如果用户使用的是Windows操作系统,那么IIS、SQL Server就应该是最佳的选择。
16
2.MySQL 是当今Unix或Linux类服务器上广泛使用的Web数据库系统。它于1996年诞生于瑞典的TcX公司,支持大部分的操作系统平台。MySQL的设计思想快捷、高效、实用。虽然它对ANSI SQL标准的支持并不完善,但支持所有常用的内容,完全可以胜任一般Web数据库的工作。由于它不支持事务处理,MySQL的速度比一些商业数据库快2~3倍,并且MySQL还针对很多操作平台做了优化,完全支持多CPU系统的多线程方式。
17
在编程方面,MySQL也提供了C、C++、Java、Perl、Python和TCL等API接口,而且有MyODBC接口,任何可以使用ODBC接口的语言都可以使用它。更重要的是,MySQL的源代码是公开的,可以免费使用,这就使得MySQL成为许多中小型网站、个人网站追捧的明星。
18
3.Oracle 是Oracle公司开发出的一种面向网络计算机并支持对象关系模型的数据库产品。它是以高级结构化查询语言为基础的大型关系数据库,是目前最流行的客户/服务器体系机构的数据库之一。目前广泛使用的版本是Oracle 8i,它之所以备受用户喜爱是因为它具有以下突出的特点: (1)支持大型数据库、多用户和高性能的事务处理。Oracle支持最大数据库,其大小可达到几百千兆,可充分利用硬件设备;支持大量用户同时对数据库执行各种数据操作,并使数据征用最小,保证数据一致性;系统维护具有很高的性能,Oracle每天可连续24小时工作,正常的系统操作(后备或个别系统故障)不会中断数据库的应用;可在数据库级或子数据库级上控制数据的可用性。
19
(2)Oracle 遵守数据库存取语言、操作系统、用户接口、和网络通讯协议的工业标准,所以它是一个开放系统,保护了用户的投资。美国标准化和技术研究所(NIST)对Oracle Server进行过检验,完全与ANSI/ISO SQL89标准相兼容 (3)实施安全性控制和完整性控制。Oracle为限制系统对各监控数据库存取提供可靠的安全性,并为可接受的数据指定标准,保证数据的完整性。
20
(4)支持分布式数据库和分布式处理。Oracle为了充分利用计算机系统和网络,允许将处理分为数据库服务器和客户应用程序处理,所有共享的数据管理由数据库管理系统的计算机处理,而运行数据库应用的工作站集中于解释和显示数据。通过网络连接环境,Oracle将存放在多台计算机上的数据组合成一个逻辑数据库,可被全部网络用户存取。分布式系统像集中式数据库一样具有透明性和数据一致性。
21
上面介绍的3种数据库产品是目前最常用的3种大型关系数据库系统,它们虽然在体系结构和操作方法上有许多相似的地方,但是在应用环境上还是各有侧重的。一个应用系统在选用数据库时,性能和价格时首先要考虑的两个因素,表1-1列出了这3种数据库在性能和价格上的对比情况,在使用时不同的系统应针对实际情况采用合适的方案。
22
表1-1 3种数据库的性价比 数据库系统 MySQL SQL Server Oracle 数据库费用 全免费 费用按连接计算,费用较高
表1-1 3种数据库的性价比 数据库系统 MySQL SQL Server Oracle 数据库费用 全免费 费用按连接计算,费用较高 按计算机主频计算,费用较高 操作系统及费用 Linux 免费 NT,价格较高 Linux全免费;windowsNT、Solaris价格较高 速度 较快 快 最快 容量 较大 大 备份、恢复 较好 好 最好
23
从用户的技术水平以及国内软件应用的现状来看,SQL Sever应该是一个较好的选择,尤其是对初学者而言。
24
Web数据库访问技术 Web页面与数据库地连接是Web数据库的基本要求。目前基于Web数据库地连接方案主要有两种类型:服务器端和客户端方案。服务器端方案实现技术有CGI、SAPI、ASP、PHP、JSP等;客户端方案实现技术有JDBC(Java Database Connectivity)、DHTML(Dynamic HTML)等。
25
Web数据库访问技术 CGI(Common Gateway Interface)
是Web服务器运行时外部程序的规范,按照CGI编写的程序可以扩展服务器的功能,完成服务器本身不能完成的工作,外部程序执行时可以生成HTML文档,并将文档返回Web服务器。 CGI程序的常用语言:Perl、C++、VB、Delphi CGI的缺点: 每个CGI程序应用是作为一个独立外部应用来运行的,与服务器上其他程序竞争处理器资源,这将导致运行速度减慢; 不提供状态管理功能,浏览器每次请求都需要一个连接的建立与释放过程,效率较低。
26
Web数据库访问技术 SAPI(Server Application Programming Interface )
服务器端应用程序编程接口:与CGI功能相同,也可用于实现扩展服务器功能。实际是一组用于完成特定功能的很复杂的函数、消息和结构 ,包含在一个扩展名为DLL的动态连接库文件中。 与CGI相比,性能上有了很大的提高,但开发需编程方面的专门知识。
27
Web数据库访问技术 PHP(Hypertext Preprocessor)
超文本预处理器:由于其良好的性能及免费的特点,是目前互联网中应用非常流行的一种应用开发平台。 优点:简单易学、跨平台、有良好数据库交换能力的开发语言;与Apache及其扩展库紧密结合;良好的安全性。 不足:安装配置复杂;缺少企业级的支持;作为自由软件,缺乏正规的商业支持;无法实现商品化的商业开发。 建议基于Unix类平台的应用采用Apache+Php+PHPEd
28
Web数据库访问技术 ASP(Activex Server Pages)
是由微软创建的Web应用开发标准,ASP服务器已经包含在IIS服务器中, ASP服务器将 Web请求转入解释器中,在解释器中将所有 ASP中的脚本进行分析,然后执行,同时可以创建COM对象以完成更多的功能,ASP中的脚本是Vbscript。 优点:安装配置方便,开发简单易学;开发工具功能强大。 不足:ASP使用了组件因而将导致大量的安全问题;无法实现跨平台,只能应用于Windows NT/2000。 建议采用MS架构的网站采用ASP应用开发平台(IIS+Visual Interdev)。
29
Web数据库访问技术 JSP (Java Server Pages)
是由Sun公司所新面市的一种交互式网页编译技术,它除了能够建立一个交互式网站之外,更能应用于不同的操作平台上。这样跨平台的特性已包含了目前大部分网站服务器配置环境,再加上它的语法书写方式可媲美ASP般的易学易懂,而且在网络安全技术方面甚至已超越ASP技术,所以,相信很快的时间内极有可能取代现有的网页编译技术,而成为商业网站的新标准。 优点:可移植性好,支持多种平台;强大的可伸缩性;多样化与强大的工具支持。 不足:安装配置管理较为复杂;运行速度较慢; 建议开发大型应用系统采用JSP
30
脚本程序与数据库的接口 在脚本程序中连接数据库一般都需要相应的接口来完成。连接数据库的常用方法有:ODBC、DAO、RDO、ADO及JDBC等。 (1)ODBC(Open Database Connectivity,即开发式数据库连接)是微软开发的一套统一的程序接口。通过这个接口可以存取不同厂商生产的数据库。 经过多年的改进,它已成为存取服务数据库的标准。事实上,ODBC技术成了后来DAO、RDO及ADO等数据库访问技术的基础。
31
(2)DAO DAO(Data Access Objects,即服务器访问对象)是微软公司开发的一套主要应用程序及开发工具,用它可以访问数据库的标准对象,如Access、VB、Excel、Word等。
(3)RDO RDO(Remote Data Objects,即远程数据库访问对象)是微软公司为增强DAO的功能而推出的新产品。 该产品强化了SQL Server的访问功能,提高了它的执行效率。
32
(4)ADO ADO(ActivteX Data Objects,即ActivteX数据对象)是微软在Internet领域采取的新举措。它本身并不是一项新技术,从对象结构的角度来看,它比DAO提供的对象更少;从存取SQL服务器的角度来看,它提供的功能也不如RDO。但它汲取了DAO和RDO最精华的部分,成为一个更适合于Internet的小而精的对象群。因此,ADO实际上是脚本程序连接数据库最好的选择。
33
(5)JDBC JDBC(JAVA DataBase Connectivity) 是Java的开发者——Sun的Javasoft公司制定的Java数据库连接技术的简称,是为各种常用数据库提供无缝联接的技术。JDBC在Web和Internet应用程序中的作用和ODBC在Windows系列平台应用程序中的作用类似。JDBC与ODBC很相似,也可以连接多种数据库。如:xbase、Oracle、Sybase、Aceess以及Paradox等。
34
B2C商务网站数据库实例
35
网上在线书店的规划 一个简单的网上购书电子商务网站,网上在线书店的功能包括: 用户注册 图书推荐和最新更新信息 图书购物车功能 图书检索功能
用户反馈功能 留言功能
36
网上在线书店所使用的数据表 1、图书信息表:Book_Info 2、用户信息表:Customer 3、出版社代码表:Publisher
4、订单表:BookBag 5、付款信息表:Orders
37
数据库及数据表的创建 在SQL Server的企业管理器中手动建立相关的库和所有表 。 1、创建用户Customer表
38
数据库及数据表的创建 2、创建出版社信息Publisher表 用来存放与图书有关的所有出版社信息。Press_ID为该表主键。
39
数据库及数据表的创建 3、创建订单BookBag表 用来存放用户选购的图书。
40
数据库及数据表的创建 4、创建付款信息Orders表 这个表中存放的是已付款后的图书信息。
41
数据库及数据表的创建 5、创建留言信息MessageBook表 存放客户提交的留言信息。
42
网上书店站点结构 Default.asp MessageBook.asp BookBag.asp MessageProcee.asp
LastBook.asp MainFunctin.inc ReComment.asp Includecopyright.inc Search.asp eBooks/ Book_infoAdd.asp CheckUser.asp Login/ ManagerMenu.inc UpdateReg.asp Book_infoControl.asp changeReg.asp BookUpdate.asp Register/ Register.asp BooksManager.asp RegControl.asp BookBagManager.asp Manager/ BookBagControl.asp
43
网站中使用的包含文件 包含文件MainFunctin.Inc和Includecopyright.Inc分别显示主页上的功能按钮和版权信息。
可以在网页中使用以下SSI包含文件: <!-- #include file="MainFunctin.Inc"--> 其效果如下所示: (每个是一个超链接) 也可以在网页中使用以下SSI包含文件: <!-- #include file="Includecopyright.Inc"-->
44
网站主页 为方便用户选购热点图书和最新图书,将前10种热点图书和前10种最新图书在主页上一一列出。
主页的上部设计了“书店首页”、“购书指南”、“新书浏览”、“畅销书榜”、“用户注册”、“鼎力推荐”、“分类浏览”和“我要留言”8个功能按钮,分别完成相应的链接。 主页的左边设计了一个用户注册栏和一个有关本站最新图书动态的动态显示区。 主页右边的上部设计了一个查询栏,可以根据书名、作者或出版社及各种图书分类进行检索。主页右边的下部分别设计了一个可以显示10种图书的热点图书区和可以显示10种图书的最新图书区。 主页的下部设计了一个版权信息区。
45
网站主页 用户登录区 用户查询区 动态显示区
46
客户信息管理 1 概述 网上书店的任务是进行在线图书销售,用户在书店中选购了相应的图书后,需要将所付款项通过网上银行或邮局汇款支付给图书公司,因此每个客户必须有一个独一无二的身份才能加以区别,Customer表就是用来存储客户网上注册的有关信息。 2 系统分析 一个用户要在本站选购并购买图书,必须先在本站获得一个唯一的用户ID。 3 工作流程设计 当客户在主页上点击“用户注册”功能按钮,就进入Register.asp用户注册界面,进行客户信息的填写。
47
客户信息管理 用户注册界面:
48
客户信息管理 数据处理过程: 当用户在注册页面上输入用户信息后,点击“注册”按钮,系统将用户填写的数据传给RegControl.asp程序进行用户身份的判别。RegControl.asp程序判别用户在用户ID、真实姓名、身份证号码、电子邮件、邮编和地址栏输入是否为空及两次密码输入是否一致,如不符合系统要求或该用户已注册,则给出相应的错误信息后,要求用户重新按要求填写;若符合要求,则将用户数据添加到Customer表中供客户以后选购并购买图书之用。
49
RegControl.asp关键代码-1 <%'取得用户的注册信息 Customer_ID = Request.form("Customer_ID") Customer_name = Request.form("Customer_name") Password = Request.form("Password") RePassword = Request.form("RePassword") Cardid = Request.form("Cardid") = Request.form(" ") education = Request.form("education") Telephone = Request.form("Telephone") Zip = Request.form("Zip") Address = Request.form("Address")
50
RegControl.asp关键代码-2 '检查用户的输入是否正确 if Customer_name<>"" and Password<>"" and RePassword<>"" and Cardid<>"" and Zip<>"" and Address<>"" then if Password=RePassword then set Con_User = Server.CreateObject("ADODB.Connection") '打开数据库连接 Con_User.Open "DSN=BookStoreSource;UID=sa;PWD=215" set rs_User = Server.CreateObject("ADODB.Recordset") rs_User.Open "Select Customer_Id from Customer Where Customer_ID='"&Customer_ID&"'", Con_User, 3
51
RegControl.asp关键代码-3 if rs_User.Eof then '没有该用户,则添加该用户 rs_User.Close sql="Insert into Customer (Customer_ID,Customer_name,Password" sql=Sql& ",Cardid,education,Address,Zip,Telephone, )" Sql=Sql& "Values ('"&Customer_ID&"','"&Customer_name&"','" Sql=Sql& Password&"','"&Cardid&"','"&education&"','" Sql=Sql& Address&"','"&Zip&"','"&Telephone&"','"& &"')" con_User.Execute(Sql) '完成修改信息入库的操作
52
用户登录 当用户注册完成后,就可以登录到本站,完成选购图书,发送留言信息等工作。
用户的登录可在本站主页的登录区完成,用户输入了正确的用户ID和密码后,单击“登录”按钮,系统就将用户输入的用户ID及对应的密码提交给CheckUser.asp程序,CheckUser.asp对用户提交的数据进行判别后,给出对应的提示信息。若用户提交的数据是用户表中已注册的,则就可登录到本站;否则将给出一个对应的出错信息
53
CheckUser.asp登录校验关键代码-1
<% User_ID = Request.Form("User_ID") '取得用户ID及对应密码 Password = Request.Form("Password") if Trim(User_ID)<>"" then set Con_User = Server.CreateObject("ADODB.Connection") '打开数据库连接 Con_User.Open "DSN=BookStoreSource;UID=sa;PWD=d215502g" set rs_User = Server.CreateObject("ADODB.Recordset") rs_User.Open "Select Customer_ID, Customer_Name, Password from Customer Where Customer_ID='"&User_ID&"'", Con_User, 3
54
CheckUser.asp登录校验关键代码-2
if Not rs_User.Eof then if Password=rs_User("Password") then '用户ID与Password正确 Message="<Font Color=Blue>恭喜您-"&rs_User("Customer_Name")&",登录成功!</Font>" Session("Guest_ID")=User_ID Session("First_Book")="" else Message="<Font Color=Red>对不起,密码输入错误!</Font>" Session("Guest_ID")="" end if
55
CheckUser.asp登录校验关键代码-3
else Message="<Font Color=Red>对不起,没有号码为"&User_ID&"的用户ID!</Font>" Session("Guest_ID")="" end if rs_User.Close Message="<Font Color=Red>对不起,用户ID不能为空!</Font>" %>
56
热点图书页面和最新图书页面 热点图书页面 当用户在页面上点击“畅销书榜”按钮,则调出热点图书页面ReComment.asp显示Book_info表中的热点图书,每个页面的右下半部分显示2本图书资料,因一页不能显示完所有的热点图书,因此在资料的下部显示了热点图书的页码及“前一页”和“后一页”超链接,用户可以单击相应的页码或“前一页”和“后一页”超链接标志,系统就将该页所对应的2种图书资料显示出来。
57
热点图书页面和最新图书页面 热点图书页面
58
热点图书页面和最新图书页面 最新图书页面 当用户在页面上点击“新书浏览”按钮,则调出本站最新图书页面程序LastBook.asp,该程序显示Book_info表中的80种最新图书资料,每个页面的右半部分显示2本图书资料,因一页不能显示完所有的最新图书,因此在资料的下部显示了最新图书的页码及“前一页”和“后一页”超链接,用户可以单击相应的页码或“前一页”和“后一页”超链接标志,系统就将该页所对应的2种图书资料显示出来。
59
热点图书页面和最新图书页面 最新图书页面
60
购物数据管理 因选购图书涉及到是哪个用户选购的问题,故用户在选购图书前必须先用已申请的用户ID和密码登录到本站后,方能进行选书和买书的操作。当用户在页面上点击“加入购物车”超链接标志,该页面将向BookBag.asp购物车管理程序发送该图书的图书编号。若用户还没有登录到本站,则系统给出“敬请先登录本站后,才能进行订购”的提示信息,否则BookBag.asp程序接到上个程序传来的图书编号后,将该用户选购的图书添加到BookBag表中,这时该图书的购买标志Buy设置为0作为当前选购的标志,并显示出该客户已选购的(Buy=0)所有图书清单。当用户点击“立即购买”按钮后,BookBag.asp就将该客户所选图书的Buy标志从0改为1,说明是已购买的图书,并给出相应的提示信息要求客户如何付款。
61
购物数据管理 【BookBag.asp】购物数据处理 12: dim Message, Sql
10: <% Const MaxCount=10 12: dim Message, Sql 13: Guest_ID=Session("Guest_ID") '取得客户编号 14: if Guest_ID="" then 15: Sql="" 16: Message="敬请先登录本站后,才能进行订购" 17: else 18: Book_ID=Request.QueryString(“Book_ID”)‘取得所选图书的编号及其需 要的操作。 19: SelectAction = Request.QueryString("SelectAction") 20: dim Con_Book, rs_Book, rs_BookBag '定义使用的变量 21: set Con_Book = Server.CreateObject("ADODB.Connection") 22: '打开数据库连接 23: Con_Book.Open "DSN=BookStoreSource;UID=sa;PWD=d215502g" 24: set rs_BookBag = Server.CreateObject("ADODB.Recordset") 25: set rs_Book = Server.CreateObject("ADODB.Recordset")
62
购物数据管理 27: if Session("First_Book")="" then
28: Session("First_Book")=True'若是第一次选书,则置First_Book标志为True 29: end if 31: rs_BookBag.LockType = adLockOptimistic 32: rs_Book.LockType = adLockOptimistic 33: rs_BookBag.CursorType = adOpenStatic 34: rs_Book.CursorType = adOpenStatic 35: rs_Book.CacheSize=6 36: rs_Book.CursorLocation=adUseClient 37: '******************************************************** 38: if SelectAction="" then 'SelectAction值为空表示只是选购图书 39: if Session("First_Book")=True then 40: '将前一次购买的标志从Buy=1改为Buy=2,以为本次购书(本次购书的Buy 标志值=1)之用 41: Sql="Select * from BookBag where Buy=1 and Customer_ID='" &Guest_ID&"'" 42: rs_BookBag.Open Sql ,con_Book
63
购物数据管理 43: do while Not rs_BookBag.Eof 44: rs_BookBag("Buy")=2
45: rs_BookBag.Update 46: rs_BookBag.MoveNext 47: Loop 48: rs_BookBag.Close 49: end if 50: Sql="Select * from BookBag where Buy=0 and Customer_ID='" &Guest_ID&"'" 51: rs_BookBag.Open Sql ,con_Book 54: Selected = False 55: do while Not rs_BookBag.Eof 56: if CLng(Book_ID) = rs_BookBag("Book_ID") then 57: '当同一本书选择了多于一次时,每次数量加1 58: rs_BookBag("Counts") = rs_BookBag("Counts") + 1 59: rs_BookBag.Update 60: Selected=True
64
购物数据管理 61: Exit do 62: end if 63: rs_BookBag.MoveNext 64: Loop
66: if Selected=False then '没有相同的书,则进行判断## 67: if rs_BookBag.RecordCount=MaxCount then 69: rs_BookBag.MoveFirst 70: Message=“你已经选了”&MaxCount&“种书,请将该”&MaxCount&“种书购买 后再进行选择" 71: else 72: rs_BookBag.AddNew 73: rs_BookBag("Customer_ID") = Guest_ID 74: rs_BookBag("Book_ID") = Book_ID 75: rs_BookBag("Counts")=1 76: rs_BookBag.Update 77: end if 78: end if '##
65
购物数据管理 79: else 'SelectAction值为为空则说明用户进行了删除、购买等操作
80: Sql="Select * from BookBag where Buy=0 and Customer_ID='" &Guest_ID&"'" 81: Select case SelectAction 82: case "DeleteAll" '删除已选购的全部图书 83:Con_Book.Execute("Delete From BookBag where Buy=0 and Customer_ID='"&Guest_ID&"'") 84: rs_BookBag.Open Sql ,con_Book 85: case "Delete" '删除已选购的一本图书 86: rs_BookBag.Open Sql ,con_Book 87: rs_BookBag.Find "Book_ID="&Book_ID 88: if Not rs_BookBag.Eof then 89: rs_BookBag("Counts")=rs_BookBag("Counts")-1 90: rs_BookBag.Update 91: if rs_BookBag("Counts")=0 then rs_BookBag.Delete 94: end if
66
购物数据管理 95: case "Buy" '购买已选购的全部图书 96: rs_BookBag.Open Sql ,con_Book
97: end select 98: end if 100: rs_BookBag.Requery 101: ‘根据BookBag表中用户选购的图书,生成相应的SQL语句,从Book_Info表 中取出选购的图书信息 102: if rs_BookBag.RecordCount>0 then 103: rs_BookBag.MoveFirst 104: Sql="Select * From Book_Info Where Book_ID In ("& rs_BookBag("Book_ID" ) 105: rs_BookBag.MoveNext 106: do while Not rs_BookBag.Eof 107: Sql=sql+","&rs_BookBag("Book_ID") 108: rs_BookBag.MoveNext 109: Loop 110: Sql=sql+")" 111: rs_BookBag.MoveFirst
67
购物数据管理 112: else 113: Sql="0" 114: Message = "选购的图书已全部删除" 115: end if
116: '将用户选购的图书从Book_info表中取出送入rs_Book游标中 117: if Sql<>"0" then 118: rs_Book.Open Sql ,con_Book 119: end if 120: ‘购买图书处理,在Book_info表中修改对应图书的库存数量,在 rs_BookBag表中将Buy标志置1 121: if SelectAction="Buy" then 122: if Not rs_BookBag.Eof then 123: rs_BookBag.MoveFirst 124: do while Not rs_BookBag.Eof 125: rs_Book.Filter="Book_ID="&rs_BookBag("Book_ID")
68
购物数据管理 126: if rs_Book.Eof then
127: Response.Write "查找"&rs_BookBag("Book_ID")&"时出错" 128: else '修改库存数量 129:rs_Book("StockCounts")=rs_Book("StockCounts")-rs_BookBag("Counts") 130: rs_Book.Update 131: end if 132: rs_BookBag.MoveNext 133: Loop 134: rs_BookBag.MoveFirst '将BookBag表中的购买标志Buy置1 135: do while Not rs_BookBag.Eof 136: rs_BookBag("Buy")=1 137: rs_BookBag.Update 138: rs_BookBag.MoveNext 139: Loop 140: rs_Book.Filter="" 141: rs_Book.MoveFirst 142: rs_BookBag.Close
69
购物数据管理 143: Message = “选购的图书已全部购买,请将所订图书款汇到 树 人网上书店 邮编:310015"
144: Sql="Select * from BookBag where Buy=1 and Customer_ID='" &Guest_ID&"'" 145: rs_BookBag.Open Sql ,con_Book 146: else 147: Message = “对不起,购书袋已空,因此不能完成购买操作,请 校对" 148: rs_BookBag.Close 149: end if 150: end if 151: end if 152: %>
70
购物数据管理 购物数据处理页面为:
71
搜索引擎 用户在主页的查询栏中指定“检索方式”和“选择分类”,并输入相关的检索关键字后,单击“搜索”按钮,就可完成相关的检索任务。
本站提供了三种检索方式:按书名、按出版社和按作者,见Default.asp的87-112行,在指定了检索方式后,还可以指定该书是属于哪一类的图书,本站提供了以下七种分类:现代文学、古代文学、外国文学、法律政治、经济金融、电脑网络和其它类别,见Default.asp的99-105行。当用户同时指定了“检索方式”和“选择分类”时,系统以逻辑与运算方式来处理,见Search.asp的54行。 用户在指定了“检索方式”和“选择分类”后,在下面的输入框中输入检索关键字,并单击“搜索”按钮,则系统将用户的选择和关键字提交给Search.asp程序来处理。
72
搜索引擎 【Search.asp】搜索处理 8: <% dim SearchMode, SearchType, SearchText, Sql 10: dim Message, TmpStr, Con_Book,rs_Book 11: '取得检索方式、选择分类和关键字 12: SearchMode = Request.QueryString("SearchMode") 13: SearchType = Request.QueryString("SearchType") 14: SearchText = Request.QueryString("SearchText") 15: TmpStr=SearchText 17: set Con_Book=Server.CreateObject("ADODB.Connection") 18: '使用ODBC方式打开数据库连接 19:Con_Book.Open "DSN=BookStoreSource;UID=sa; PWD=d215502g" 20: set rs_Book = Server.CreateObject("ADODB.Recordset") 21: '如输入的关键字不为空 22: if SearchText<>"" then 23: '根据用户选择的检索方式生成相应的Sql语句
73
搜索引擎 24: select case SearchMode 25: case "Book_Name" '按书名查询
26: Sql="Select * from Book_Info B, Publisher P Where B.Press_ID=P.Press_ID and Book_Name Like '%"&SearchText&"%'" 27: Message="书名中含 "& SearchText 28: case "Press" '按出版社查询 29: rs_Book.Open "Select Press_ID from Publisher Where Press_Name Like '%"&SearchText&"%'", Con_Book, adOpenDynamic 30: Message="出版社名中含 "& SearchText 31: if not rs_Book.eof then 32: SearchText="('"&rs_Book.Fields("Press_ID")&"'" 33: rs_Book.MoveNext 34: do while Not rs_Book.Eof 35: SearchText=SearchText&",'"&rs_Book.Fields("Press_ID")&"'" 36: rs_Book.MoveNext 37: Loop
74
搜索引擎 38: SearchText=SearchText&")" 39: else 40: SearchText="()"
41: end if 42: rs_Book.Close 43: Sql="Select * from Book_Info B, Publisher P Where B.Press_ID=P.Press_ID and B.Press_ID In "&SearchText 44: case "Auther" '按作者查询 45: Sql="Select * from Book_Info B, Publisher P Where B.Press_ID=P.Press_ID and Auther Like '%"&SearchText&"%'" 46: Message="作者名中含 "& SearchText 47: case else 48: Sql="Select * from Book_Info B, Publisher P Where B.Press_ID=P.Press_ID and (Book_Name Like '%"&SearchText&"%' Or Auther Like '%"&SearchText&"%' Or Press_Name Like '%"&SearchText&"%')" 49: Message="关键字为 "& SearchText 50: end Select
75
搜索引擎 51: '根据用户选择的选择分类生成相应的Sql语句
52: if SearchType="选择分类" or SearchType="" then 53: else 54: Sql=Sql & " and Type_Code='"&SearchType&"'" 55: Message=Message & ", 图书分类为:"&SearchType 56: end if 57: else 58: Sql="" 59: Message="对不起,没有输入关键字" 60: end if
76
搜索引擎 搜索处理页面为:
77
留言薄 当用户希望与本站就有关购书问题进行协商与联系时,就可以通过留言薄将所要协商的内容或提问提交给本站。用户可以通过留言薄查看各个用户的留言信息,也可向本站发送留言信息,由MessageProcee.asp程序处理提交的留言内容。 留言薄MessageBook.asp 页面为:
78
留言薄 【MessageProcee.asp】留言薄数据处理
8: <% dim Customer_name, Title, , Body 11: dim Guest_ID, Message, Con_User 12: '取得用户提交的数据 13: Customer_name = Request.form("Customer_name") 14: Title = Request.form("Title") 15: = Request.form(" ") 16: Body = Request.form("Body") 17: Guest_ID=Session("Guest_ID") 18: if Customer_name<>"" and Title<>"" and Body<>"" then 19: set Con_User = Server.CreateObject("ADODB.Connection") 20: '打开数据库连接 21: Con_User.Open "DSN=BookStoreSource;UID=sa;PWD=d215502g" 22: response.Write Message 23: sql="Insert Into MessageBook (Customer_ID,name,Title, ,Body) Values"
79
留言薄 24: sql=sql&"('"&Guest_ID&"','"&Customer_name&"','"
&Title&"','"& &"','"&Body&"')" 25: Con_User.Execute(sql) 26: con_User.Close '关闭连接 27: Set con_User=Nothing 28: Message="<p><b>恭喜您,留言已提交!点击<a href='/MessageBook.asp'>查看留言薄</a></b></p>" 29: else 30: Message="<p><b>对不起!你输入的内容不够完整</b></p>" 31: end if 32: %>
80
Web数据库发布的一般过程 建立网站服务器 设计与创建数据库 设定ODBC驱动程序 设计Web数据库应用程序
81
谢谢各位!
Similar presentations