5.2 数据库的连接 数据库系统往往是一个大型WEB应用程序的核心。同其他WEB应用程序的编写方法相比,强大的数据库访问能力,简单一致的数据库访问方式正是ASP的突出优点之一。在ASP中,我们可以轻松的利用Microsoft提供的强大的ADO技术对各种各样的数据库进行访问,当然可以访问ACCSEE这样的文件型数据库。 内容来自www.paper51.com ADO提供的对象接口主要为有Connection,我们可以利用Connection,Command,Recordset三个对象访问数据库。Connection对象就是使ADO与数据库之间建立一个通道,起到一个类似拨号连线的作用,任何对数据库的造作必须先建立Connection,然后才能进行。本系统数据库连接代码如下所示: paper51.com <% copyright paper51.com dim conn http://www.paper51.com dim connstr copyright paper51.com
dim db‘声明变量 http://www.paper51.com db="../Databases/0791idc.mdb" '数据库文件位置 内容来自论文无忧网 www.paper51.com on error resume next 内容来自论文无忧网 www.paper51.com connstr="DBQ="+server.mappath(""&db&"")+";DefaultDir=;DRIVER={MicrosoftAccess Driver (*.mdb)};"‘用server.mappath方法将当前目录下的数据库相对路径转换成服务器的真实路径 http://www.paper51.com setconn=server.createobject("ADODB.CONNECTION")‘创建名为conn的Connection 内容来自www.paper51.com
if err then 内容来自www.paper51.com err.clear copyright paper51.com
else 内容来自论文无忧网 www.paper51.com
conn.open connstr‘使用open方法打开数据库连接 内容来自论文无忧网 www.paper51.com end if paper51.com sub CloseConn() 内容来自论文无忧网 www.paper51.com conn.close paper51.com
setconn=nothing‘在使用conn对象后应该关闭连接,释放资源 http://www.paper51.com end sub paper51.com
%> http://www.paper51.com 5.3 用户登陆模块的实现 http://www.paper51.com 用户只有通过index.asp登录界面才能进入主页面进行相应的操作。 内容来自www.paper51.com 进入登录界面:通过注册页面让用户提交注册并保存在user表里,并通过登录页面读取用户提交的登录信息与保存在数据库中的数据进行比较以验证是否成功登录。 http://www.paper51.com
用户登录界面如下图5-1所示: 内容来自www.paper51.com
paper51.com http://www.paper51.com 图5-1用户登录界面 copyright paper51.com 用户登录模块主要是通过数据库连接来实现。数据库的连接必须使用ADO的内置Connection对象,并且调用Recordset对象来进行与数据库的查找、删除、更改等功能,在数据库中添加User表,用来保存用户信息。User ID列,用于保存用户名,设置为主键,可以标识每个用户。PWD列用于保存用户的密码,email用于保护用户的email地址,当然还有其他列,可以根据自己需要添加一些保存用户信息的列。 copyright paper51.com
如果用户还未注册,可以点新用户注册注册,进入注册页面,填写注册信息,提交后显示注册成功,进入会员中心,可以修改自己的资料,修改密码,查询订单处理情况等。注册页面如下图5-2所示: 内容来自论文无忧网 www.paper51.com
图5-2新用户注册页面 内容来自论文无忧网 www.paper51.com
5.4 用户查询模块的实现 内容来自论文无忧网 www.paper51.com 书的查询:注册会员可以根据书的名称,或者书的作者查找,也可以根据大小类分类查找。 paper51.com 查询效果图如下图5-3所示: 内容来自www.paper51.com 图5-3 书的查询 copyright paper51.com 按书的名称进行查询,比如在书的名称中输入2008考研英语,所有大类中选择考研公共课,小类中选择英语,具体操作如下图5-4所示: copyright paper51.com
图5-4 书的分类查询 内容来自www.paper51.com 5.5 订单模块的实现 内容来自www.paper51.com
在数据库中添加一个名为OrderList的表,订单号码用于标识每份订单,设为主键。Name用于存贮下单人ID,address用于保存定货人的地址,time保存下单时间,phone用于保存定货人的电话,status用于保存订单的处理状态,0为未处理,1为已经处理。购物车的实现模块具体代码如下: 内容来自论文无忧网 www.paper51.com
<% 内容来自www.paper51.com UserName=session("UserName") '登陆用户id http://www.paper51.com
Receiver=request.form("Receiver") '必填字段‘从登录页面获取收货人地址 copyright paper51.com
Sex=request.form("Sex") '从登录页面获取性别 内容来自www.paper51.com Phone=request.form("Phone") '必填字段‘从登录页面获取电话 copyright paper51.com Add=request.form("Add") '必填字段‘从登录页面获取地址 paper51.com
Notes=request.form("Notes") ‘从登录页面获取记录 paper51.com Email=request.form("Email") ‘从登录页面获取邮箱 paper51.com
Subject=request.form("Subject")‘从登录页面获取主题 内容来自论文无忧网 www.paper51.com
CompanyName=request.form("CompanyName") ‘从登录页面获取公司名称 paper51.com Fax=request.form("Fax") ‘从登录页面获取传真 http://www.paper51.com if UserName="" then copyright paper51.com UserName="游客" ‘如果登录名称为空,则为游客 内容来自www.paper51.com end if 内容来自论文无忧网 www.paper51.com
if Add="" then paper51.com
Add=null 内容来自论文无忧网 www.paper51.com end if copyright paper51.com if Fax="" then copyright paper51.com Fax=null copyright paper51.com end if paper51.com
'判断购物车是否为空 http://www.paper51.com ProductList =Session("ProductList") http://www.paper51.com if productlist="" then 内容来自www.paper51.com
response.redirect"error.asp?error=007"‘重新定位到error.asp 内容来自www.paper51.com response.end paper51.com else copyright paper51.com sql_product="select * from Product where Product_Id in("&productlist&") order by Product_Id"‘从productlist表中按Product_Id排序来查找产品 http://www.paper51.com Set rs_order = conn.Execute(sql_product)‘将查询结果赋给rs_order 内容来自www.paper51.com
end if http://www.paper51.com
BranchID="0022" paper51.com CoNo="000040" copyright paper51.com '交易日期,格式:YYYYMMDD 内容来自www.paper51.com yy=right(year(date),2) http://www.paper51.com mm=right("00"&month(date),2) 内容来自www.paper51.com dd=right("00"&day(date),2) 内容来自www.paper51.com
riqi=yy & mm & dd paper51.com '生成订单号所有所需元素,格式为:小时,分钟,秒 内容来自论文无忧网 www.paper51.com xiaoshi=right("00"&hour(time),2) 内容来自论文无忧网 www.paper51.com fenzhong=right("00"&minute(time),2) paper51.com miao=right("00"&second(time),2) http://www.paper51.com '产生外部和内部定单号 内容来自www.paper51.com BillNo=xiaoshi & fenzhong & miao copyright paper51.com inBillNo=yy & mm & dd &"-" & xiaoshi & fenzhong & miao paper51.com Setrsadd=server.createobject("adodb.recordset")‘创建名为rsadd的recordset对象 copyright paper51.com rsadd.Open "select * fromOrderList" ,conn,1,3‘打开从OrderList查询返回的记录 http://www.paper51.com Set rsdetail=server.createobject("adodb.recordset")‘创建名为rsdetail的recordset对象 copyright paper51.com rsdetail.Open "select * fromOrderDetail" ,conn,1,3‘打开从OrderDetail查询返回的记录 http://www.paper51.com '事务定义开始 内容来自论文无忧网 www.paper51.com 'conn.Begintrans 内容来自www.paper51.com '操作之一开始写入订单列表信息 内容来自www.paper51.com rsadd.AddNew ‘使用AddNew方法添加记录 http://www.paper51.com rsadd("UserName")=UserName paper51.com rsadd("OrderNum")=inBillNo http://www.paper51.com
rsadd("Receiver")=Receiver 内容来自论文无忧网 www.paper51.com rsadd("Sex")=Sex 内容来自www.paper51.com rsadd("Phone")=Phone paper51.com rsadd("Add")=Add http://www.paper51.com rsadd("RecTime")=now() paper51.com if Subject<>"" thenrsadd("Subject")=Subject paper51.com if Email<>"" thenrsadd("Email")=Email 内容来自论文无忧网 www.paper51.com if CompanyName<>"" thenrsadd("CompanyName")=CompanyName 内容来自论文无忧网 www.paper51.com
if Fax<>"" then rsadd("Fax")=Fax paper51.com if Notes<>"" thenrsadd("Notes")=Notes 内容来自论文无忧网 www.paper51.com
if error>0 then http://www.paper51.com response.write" 操作订单列表生成错误!!" paper51.com
return 内容来自www.paper51.com end if 内容来自论文无忧网 www.paper51.com
rsadd("Flag")="No" paper51.com rsadd.Update‘更新数据库中的当前记录 http://www.paper51.com
While Not rs_order.EOF '把购买的产品资料读出来,写入定单详细资料表中 paper51.com rsdetail.AddNew ‘使用AddNew方法添加新的记录 内容来自论文无忧网 www.paper51.com rsdetail("UserName")=UserName '下单用户号 paper51.com rsdetail("OrderNum")=inBillNo '订单号码 内容来自论文无忧网 www.paper51.com
rsdetail("Product_Id")=rs_order("Product_Id") '产品编码 内容来自论文无忧网 www.paper51.com rsdetail("OrderTime")=date() http://www.paper51.com IF ERROR>0 THEN http://www.paper51.com
response.write"操作订单详细信息表生成错误!!" 内容来自论文无忧网 www.paper51.com RETURN 内容来自论文无忧网 www.paper51.com END if paper51.com
rsdetail.Update 内容来自论文无忧网 www.paper51.com
rs_order.MoveNext‘指向下一个记录 copyright paper51.com Wend http://www.paper51.com '事务操作结束 copyright paper51.com 'conn.CommitTrans 内容来自www.paper51.com
rsdetail.close paper51.com set rsdetail=nothing http://www.paper51.com rsadd.close http://www.paper51.com
set rsadd=nothing http://www.paper51.com rs_order.close http://www.paper51.com
set rs_order=nothing ‘关闭对象,释放资源 内容来自论文无忧网 www.paper51.com Session("ProductList")="" http://www.paper51.com
%> 内容来自www.paper51.com 生成订单号码效果图如下图5-5所示: copyright paper51.com paper51.com 图5-5生成订单号码 http://www.paper51.com
购买书的过程为:查看新书,查看书的详细信息,选取书,点击放入购物车,填写个人资料,提交后生成上图所示订单号码。购物车如下图5-6所示: copyright paper51.com 内容来自论文无忧网 www.paper51.com 图5-6购物车 copyright paper51.com 查看购物车,可以查看购买的书,总价等,还可以更新数量,如果用户想进行支付就点击开始支付,如果想继续购买书,点击继续购买,关闭当前页面,进入书的展示页面。效果图如下图5-7所示: paper51.com copyright paper51.com
内容来自www.paper51.com |