6 数据库驱动程序
现今的网络电子商务都要与数据库产生联系的关系,这里所指的
数据库是 Web Server上的数据库,其实数据库就是一个文件,但
是,它是一个结构化储存数据的格式文件。其实我们常常在使用
数据库而不清楚的自知,例如,我们有时候操作过的,mdb 文件,
这就是一个 Access格式的数据库文件。
要存取网络服务器上的数据库可是跟我们单机上的操作有很大不
同,在 ASP网页中要存取网络服务器上的数据库,必须使用存取数
据库对象 ADO( Active X Data Objects),ADO是存取数据库对象
的统称,我们主要用来存取数据库的对象有下列三种:
Connection对象
Record set对象
Command对象
在 ASP中使用 ADO对象就可以存取数据库了吗?当然不行,除了 ADO
对象外我们还要有 ODBC驱动程序,因为我们存取任何一种数据库
都必须有其相对应的 ODBC驱动程序,ADO对象才能够对数据库的文
件作存取的动作。
6——1 数据库驱动程序
我们存取任何一种数据库都必须有其相对应的数据库驱动程序,
ADO对象才能够对数据库的文件作存取的动作。
ODBC(Open Data Base Connectivity)
OLEDB(Object Linking and Embedding Data Base)
以上这两者皆为驱动程序类别,应用程序可通过此驱动程序接口
来存取数据库的数据,也就职是说,要使 ADO对象可以存取数据库,
就必须安装相对应的驱动程序,不同数据库驱动程序,存取相对
应的数据库类型,
ODBC与 OLEDB只是驱动程序们的统称而已,每一,种不同类型的数
据库都拥有自己相对应的驱动程序,如下表所示:
如果你已安装了 IIS/PWS 4.0版,则至少会有下列三种数据库驱动
程序:
那我要使用 Access2000数据库时怎么办?其实,你只要安装较新
的软件后就会附有相关的最新数据库驱动程序,要不然你也可以
直接连上微软的网站下载安装最新的数据库程序,如果你是使用
IIS5.0 版那你就大可放心了,因为 IIS 5.0版已经提供了新版的
数据库驱动程序了。
★ 查看已安装的驱动程序
在我们的机器上到底安装了哪能些 ODBC数据库驱动程序
呢?要查看我们机器上安装了哪些数据库驱动程序,首
先,我们必须先打开, 控制面板,,然后再打开, ODBC
数据来源, 项目:
在打开, ODBC数据源, 项目后,接着就会出现, ODBC数
据源管理员, 对话视窗,我们直接切换至, 驱动程序,
选项页,就可以看到已安装在我们机器上的数据库驱动
程序,在你的机器中已安装的数据库驱动程序的数目多
少要看你安装了多少软件而定,因为很多的软件在我们
执行安装时常常会自动的帮我们安装了某些 ODBC数据库
驱动程序:
6—— 2 ADO对象群的 Connection对象
Connection对象是负责与数据库实际的链接动作,建立
与网络服务器数据库的链接是进行数据库存取的第一步,
若没有 Connection对象链接数据库,则空有其他对象也
没用,那我们要如何来建立一个 Connection对象
呢?其标准格式如下所示:
Set对象名 =Server,Create Object (“ADODB,
Connection”)
上式中的“对象名”是我们自定义的,并没有强制性的
命名规定,不过,最好是取一个有意义的名字,以方便
我们使用与记忆。
建立了 Connection对象后我们紧接着就要利用这个
Connection对象的, Open”来链接数据库,
下例为一个链接 Access2000格式的 test,M d b数据库文
件范例:
1.Set cn = server,Create object (“ADODB,
Connection”)
建立一个对象名为 cn的 Connection对象;
2.使用变量 Provide来指定我们要使用的数据库驱动程序,
provider=“provider=Microsoft.jet.oledb.4.0;”
因为我们要进行链接存取的数据库文件类型为 Access格式,
所以使用的数据库驱动程序为:
microsoft.jet.oledb.4.0
3.使用变量 Path来指定我们要使用的数据库路径与文件名,
path=“data source=”& server,Map path (“test,
mdb”)
我们要进行链接存取的数据库文件,必须指定此数据库文
件的完整路径名称。所以我们必须使用,Server.MapPath”
方法来取得数据库文件的完整路径名称。
间的分隔符号,不可省略。
4,接着使用 Open方法来打开我们指定数据库
文件。
★重点:上述的说明有两个重要的提点
1、使用 Connection对象的,Open” 方法来链
接,mdb” 数据库必须给予两个参数:
provider(驱动程序名称 ),data source(数
据库源 )
2、把握,Open” 两个参数的使用,我们可将
步骤 2,3,4合并来写;
cn.open“provider=Microsoft.jet.oledb.
4.0;data source=”&
server.mappath(“test.mdb”)
,;” 分号为参数
★ 不同的数据库驱动程序,不同的参数
链接不同类型的数据库要使用不同的对
应驱动程序,没忘记吧,不同的驱动程
序当然它们的参数组合也就不同了,每
一种不同驱动程序都有特定的参数格式:
▲链接 Dbf 数据库
▲链接 Dbc数据库
▲链接 Excel数据库
▲链接 Text数据库
▲链接 SQL数据库
★ 数据库驱动程序名称哪里来?
链接不同类型的数据库要使用不同的对应驱动程序,
这是一再强调的,那么我们如何得知数据库驱动程
序的名称呢?先打开“控制面板”,然后再打开
,ODBC数据源”项目,打开,ODBC数据源”项目后,
接着就会出现,ODBC数据源管理员”对话视窗,我
们直接切换至“驱动程序”先项页,注意看到“名
称”栏位,这些条例的项目就是打开相关数据库的
驱动程序名称。
注意
取用这些驱动程序名称,必须一字不漏地抄写下来,
包括英数字与符号,设置空白字符也不可放过。
6——3 ADO对象群的 Recordset 对象
★ 建立 Recordset 对象
Recordset 对象是负责浏览与操作从数
据库取出来的数据, 其标准格式如下所
示:
上式中的, rs”( 对象名 ) 同样是我们自
定义的, 没有强制性的命名规定, 不过,
最好是取一个有意义的名字, 以方便我
们使用与记忆 。
接着使用 open方法来打开数据表或执行
select指令 。
参数设置如下:
▲ 参数一 ( Source), 此 参 数 可 为 一 个
Command对象名称, 一段指令, 一个指定的数
据表格名称或是一个 Stored Procedure,若指
定为数据表名称, 则打开整个数据表, 若使用
Select指令则建立的 Recordset 对象内所存放
的数据为选取数据记录的结果 。
▲ 参数二 ( Action Connection), recordset
可通过此属性链接 connection对象,此参数可
为 connection对象名称或是一串包含, 数据库
链接信息 ( Connection String), 的字符串
参数 。
▲ 参数三 ( Cursor Type),以何种游标
打开数据, 包含 ad0pen Forward0nly、
ad0pen Keyset, ad0penDynamic,
ad0penStatic四种方式 。
▲ 参数四 ( Lock Type),采用何种 Lock
类型, 包含 adLockRead0nly,
adLockpessimistic, adLock0ptimistic
adLockBatch0ptimistic四种类型 。
▲ 参数五 ( 0ptions),对数据库请求的
类型, 包含 adCmdUnknow,adCmdText、
adCmdTable,adCmdStoredproc;四种参
数 。
★ 读取 Recordset对象数据
要读取 Recordset对象内的数据, 就必须先了解数据表的
结构 !
▲ Field对象:数据库中最小数据单位为, 栏位,, 在
ADO对象群中相对应的就是 Field对象, Field对象拥有三
个属性, 分别为, Name” (栏位标题 ),,Value”( 栏位数
据内容 ),, Type“( 栏位数据类型, 例如:数字, 文字,
日期等等 ) 等三种:
▲ Fields集合对象,Fields对象集合就是 Fields集合对象,
对比于数据库的组织结构来看, 栏位的集合就构成, 数据
记录,,了解了 Recordset对象内的基本结构, 我们可以
清楚的知道 Fields集合对象基本上就是一个, 数组,, 因
此我们就可以利用数组的特性, 也就是可以利用, Count”
属性配合, For” 循环语句来列举出 Fields对象 。
另外, 我们还可以搭配下方属性 Move First及 BOF将所有
数据读取 。
※ 改变目前数据表的方法
▲ Move Next:移至下一笔数据使其成为现用数据记录
▲ Move Previous:移至前一笔数据使其成为现用数据记

▲ Move First:移至第一笔数据使其成为现用数据记录
▲ Move Last:移至最后一笔数据使其成为现用数据记录
▲ BOF:数据记录指标是否移至第一笔数据记录之前
▲ EOF:数据记录指标是否移至最后一笔数据记录之后
▲ Absolute Position:设定或返回现用数据记录的绝对
位置
※ 数据表的新增, 删除与修改
▲ Addnew:新增数据记录
▲ Update:更新数据记录
▲ Cancel Update:取消更新数据
▲ Delete:删除数据记录
下例即是添加数据记录的使用方
法, 请注意:, rs“是一个我们
自行建立的 Recordset对象:
注意
当我们使用, Addnew”方法加入
新数据后, 最后一定还要加上调
用, Update”方法来将数据记录
更新, 如此一来添加的数据才会
被存进数据库文件中 。
6——4 ADO对象群的 Command对象
★ Command对象
Command对象负责对数据库提供请求, 也就是传递
指定的 SQL指令, 即执行 Action Query指令, 建立
方式如下:
※ 何为 Action Query指令?
Action Query指令是指能够写和数据的指令, 可
分为以下几种:
▲ Delete指令:删除数据记录, 语法如下:
例如, 我们要将, 员工, 数据表中, 年龄, 已经
超过, 60”岁的人员数据删除 。
注意:如果指令中的, Where条件式, 忽略掉而没
使用, 则所有的数据可是都会被删除的, 也就是
说, 数据表的内容将会是空的 。
▲ Update指令:更新数据记录, 语法如下:
通常我们都会利用 Update指令来进行数学运算, 例如, 公司要
进行年度薪资调整, 因此我们要将, 员工薪资, 数据表中, 薪资,
栏位提高五个百分比:
▲ Insert Into指令:新增数据记录, 语法如下;
例如:公司加入了新的成员, 我们要在, 员工, 数据表中加入这
位新员工的数据 。
注意:栏位名称与栏位值必须相对应 !
此格乃是将 Select指令所选取的数据记录新增至另一个数据表中 。
注意:此格式中的两个数据表必须是预先就已经建立完成的 。
▲ SelectInto指令:建立新数据记录, 语法如下:
此格式乃是将所选取的数据记录新增至另一个, 新的, 数据表中 。
例如, 我们要将, 员工薪资, 数据表中, 薪资, 栏位值高于 3万
元的员工人员数据建立成另外一个新的, 高薪人员, 数据表
※ 如何执行 Action Query指令
在要执行 Action Query指令非常简单, 我们只要
将 Action Query指令指定给, Command”对象的
,Command Text”属性, 然后再调用, Command”
对象的, Execute”方法执行 Action Query指令,
如下图所示:
注意
,cmd”是一个我们已经建立好的, Command”对象,
而, SQL”则是我们要执行的 Action Query指令 。
注意
Action Query指令的使用时机:针对大量数据的
删除, 添加与更新, 其效率较高 。
6-5 计算机网络在线选票设计
我国的民主进步是世界有目共睹的,选举的基本原则是少数
服从多数,多数尊重少数,现在的校园当然也要民主开放,
我们的班级干部如班长、副班长等等,都是由班级同学们选
取出来的,不过选举人少还无所谓,相对的,如果选举人多
那花费的时间与相关费用也跟着增加,现在计算机网络科技
发达,我们就采用计算机网络来设计一个在线选票网页。
6-5-1 计算机网络在线选票
在线选票,既省时间又操作方便,最重要的是能马上开票,
投票后选票结果就能马上呈现在眼前。所以现在就来为同学
示范一个在线选票的 ASP程序机制,本设计范例是以选票选举
优秀生为例,示范如何制作在线选票程序,程序中除了基本
的选票机制外,还有得票数的长条图表示。
6—5—1 选票机制的组成
在线选票机制的组成在本范例中共分为三个部分!
vote.asp:用来显示目前的选票结果以及进行投票动作的程序
机制。
votesave.asp:进行储存新投票结果的程序机制。
vote.mdb:记录投票结果的数据库。
★在线投票程序网页 vote.asp:
当投票者第一次链接此程序网页时将出现如下的画面:
当我们选择好理想人选,按下“投下神圣的一票”按钮后,
投票的表单就会将投票数据送交 votesave.asp程序进行处
理,然后又自动转向链接回到投票网页程序 vote.asp的程
序网页画面,但此时你可以发现画面中:我们投票的人选
票数增加了,但是原本显示“你的 — 选票模范生”的字句
变成了“你已经投选票了,只能观看投票结果!”,同时
那个“投下神圣一票”的按钮也不见了,没错,这就是我
们防止重复投票的过滤机制,如下图所示:
★ 储存投票结果程序 votesave.asp:
本程序是负责将投票程序网页 vote.asp中表单所传送过来的
投票数据更新储存到数据库中,但是并没有显示任何网页内
容,而在新的投票数据更新到数据库后就直接转向链接回投
票程序网页 vote.asp去显示最新的投票结果。
★投票结果数据库 vote.mdb:
在数据库我们制作了一个名称为,student” 的数据表,用来
储存相关的票数数据,其数据表的结构如下:
6— 5— 2 投票程序网页
首先,我们先来看一下如何建立选票数据库的链接与数据表
的打开,如下图:
关于建立数据库链接对象、链接数据库与建立数据库存取的
数据记录对象,这三个部分想必各位网友们看过前面的章节
后应该是非常熟悉才对,我们现在将针对打开数据表进行数
据记录存取的部分做个说明。
★ Recordset 对象的 open方法
参数 1:欲打开的数据表名称或 Select 指令,若指定 Select,
则我们建立的数据记录对象将是 Select指令筛选数据记录后
的结果,如果指定为数据表名称,则打开整个数据表,在本
例中我们采用 Select指令的方法。
参数 2:指定一个已经链接打开的数据库对象,本例中我们已
建立链接打开的为 Conobject对象。
参数 3:指定数据对象 Recordset的打开类型,此参数有下列
四种类型。
注意
在多人存取数据库的情形下,将设置设为 1,则他人若添加数
据记录的时候,我们将无法立即看到他人添加的数据记录,
若设置值为 2,他人若添加数据记录的时候,我们将可以看到
他人添加的数据记录。
在本投票程序网页中,因为我们只需要读取数据库的内容来
做显示的处理,因此我们就将此参数设置为 0。
参数 4:指定锁定类型,此参数有下列四种类型
设置值 1,Recordset 对象的 Add New,Delete与 Update方
法都不可以使用。
设置值 2:若有两位连接者同时执行程序而进行同一笔数
据记录更新操作的时候将产生错误,因此只要有一个连接
者的程序进行数据栏位更动时就将数据记录锁定,直到此
程序调用 Update方法时才将数据记录解除锁定。
设置值 3:乐观锁定,是认为不可能有两位连接者同时执
行程序而进行同一笔数据记录更新操作,因此只在 Update
方法被调用时才将数据记录锁定,数据记录一写入数据库
后立即解除锁定。
设置值 4:在数据记录栏位进行变动时,并不会将更动的
数据写入数据库,在 Update Batch方法被调用时才将全部
有更动的数据写入数据库,而且在更动的数据写入数据库
时才会锁定数据记录。
注意
在本投票程序网页中,我们只需要读取数据库内容并不会做
任何的数据改变更动作,因此选择设置值为 1,但是在储存投
票结果程序 votesave.asp中就不能选此设置值,后续小志将
再做说明。
★如何设置票数长条图?
如何显示票数的长条图,当然不是用程序画出来的,在 HTML
网页标签中有一个影像标签,其格式如下:在
<IMG SRC=,图片名称” Width=图片宽度设置值
Height=图片高度设置值 >
我们的长条图就是利用 HTML影像标签的图片宽度属性 Width与
图片高度属性 Height变化出来的,首先,笔者准备了一个宽
度 5个像素,高度 15个像素的图片,1”,图片高度属性
Height设置值维持 15个像素不变,但是图片宽度属性 Width设
置值则随着得票数的比例来变化,我们先来看图片宽度属性
Width设置值的产生方式:
第一个步骤就是先计算投票数(上图阴影部分程序语
句),很简单,将个别候选取人的得票数加起来就是
总投票数了。接着,开始计算各个候选取人的得票图
片宽度属性 Width设置值(上图了阴影部分程序语
句),我们要先利用 IF语句判断候选取人的票数是不
是 0,因为除法中分子不能是零嘛!
提示
你一定觉得很奇怪,按比例显示应该是候选人的得票
数除以总投票数乘 100啊,怎么会是乘 500?因为怕图
形显示的太短不好看呀,想想,如果单纯按照百分比
来显示图形,那即使是得票率百分之百,那图形的显
示宽度不就只有 100个像素?所以笔者就将图形的显
示宽度乘以 5倍了,也就是说得票率百分之百,图形
的显示宽度就有 500个像素,这并不是硬性规定,你
可依你的版面配置来设置喔。
★ 如何显示票数长条图
在计算好各个候选人的得票图片宽度属性 Width设置
后,该如何将图形显示出来,说见下图。
小志准备的基础图形 5*15像素图片,1” 文件名为
vote,Gif,所以 HTML影像标签的图片文件名为设置值
为 vote,Gif,图片高度属性 Height设置维持 15个像
素不变,所以省略不设置,图片宽度属性 Width设置
值则随着我们程序计算好的各个候选人的得票图片宽
度来变动。
★目前候选人得票数
要在票数图形后加上目前候选人的得票数,只要在
HTML影像标签后方加上,<%=RS(” 候选人,)%>票”
就行了,“票”字要加上去,如下图,要不然网页中
显示出来的只是数字,根本不知道是什么意义。
★ 圈票处选择钮设置
圈票处的选择钮在设置时要特别小心,所有的选择钮组件名
称都必须是相同的( Name 属性,本例名称为 vote),只有组
件在表单数据送出时的值不同而已( Value属性):
提示
选择钮只有单选的功能,也就是说表单中全部的选择钮栏位
只有一个能生效,不能复选,虽然名称都相同,但是表单传
送出去的选择钮“值”却是不同的,因此就可依不同的值来
决定得票都是哪位候选人。
★防止重复投票的过滤机制
我们之前说过,在投票的程序网页中按下“投下神圣的一票”
按钮后,投票的表单就会将投票数据送交 votesave,Asp程序
进行处理,当自动转向链接回到投票程序网页画面时,“你
的一选票模范生”的字句变成“你已经投过票了!只能观看
投票结果!”,同时“投下神圣一票”的按钮也不再出现,
这就是防止重复投票的过滤机制,在本例中我们利用 session
对象来建立过滤机制。
Session对象是 ASP文件共用的对象,每一位连接者都
有个别拥有属于自己的 session对象,将数据写入 session对
象的方法如下:
当我们将数据写入到 session对象中,只是将数据写入到目前
连接者的 session对象中,与其他的连接者并无关系,因此我
们就可依照连接者目前 session对象的数据值来判断连接者是
否具有进行投票的权利。
※ 先进行变量名称为 checkvote的 session对象数据值,如果
其数据值为,yes” 代表投过票了,则将显示于程序网页中的
信息文字字符串设置为“你已经投过票了!只能观看投票结
果!”,并且将决定赤示“投下神圣的一票”按钮与否的确
认变量,checkvote” 设置为,no” 代表不显示投票按钮。
※ 如果 session对象其数据值为,no” 则代表尚未投票,将
显示于程序网页中的信息文字字符串设置为“你的一票选模
范生”,并且将显示投票按钮的确认变量,checkvote” 设置
为,yes” 代表显示投票按钮。
7---1— 3 投票结果储存程序
同样的,我们先来看一下如何建立选票数据库的链接
与数据表的打开,如下图:
发现跟我们投票程序网页中,建立选票数据库的链接
与数据表的打开的程序语句有何不同之处吗?没错,
就是数据记录对象 Open方法的第三与第四个参数设置
不一样!
在第三个指定数据对象 Recordset打开类型的参数,
我们改变指定类型值为 1(可读写模式且数据记录可
自由移动),第四个指定锁定类型的参数,我们改变
指定类型值为 3,乐观锁定,因为笔者个人认为不可
能有两位连接者同时执行程序而进行同一笔数据记录
更新操作,因此只在 Update方法被调用时才将数据记
录锁定,数据记录一写入数据库后立即解除锁定。
如果我们将第四个指定锁定类型的参数,依然指定类
型值为 1,则程序将会出现下图的错误:
为什么会出现错误呢,因为若指定锁定类型的参数类
型值为 1,则我们将无法使用 Recordset对象的 AddNew、
Delete与 Update方法,但是我们要更新投票票数就得
用到 Recordset对象的 Update方法啊,所以参数类型
值为 1不能用,那我们可不可以指定参数类型值为 2?
当然可以,只是笔者个人偏好喜欢指定参数类型值为
3(因为笔者天性乐观?),那可不可以指定参数类
型值为 4?我们更新的数据只有一栏还不至于要进行
批处理锁定啦!
投票结果储存程序,votesave.asp”,在本程序中完
全没有网页数据的显示,本程序只负责将投票程序网
页中,所传达过来的投票数据更新到数据库中,然后
将链接转向回投票程序网页。
※ 更新投票结果
1.先接收来自投票程序网页中表单所传送过来的投票数据,
这个数据值其实就是表单中选择钮的 Value属性值(上图阴影
部分程序语句)。
2.利用多执行路径的 Select Case语句来决定哪位候选人的票
数加 1(上图阴影部分程序语句)。
3,利用 Update方法将新的投票结果更新写入到数据库中(上
图阴影部分程序语句)。
请注意
当我们利用 RS(“栏位名称”) =,更新后数据”的语句将数
据写入数据记录栏位,这们的语句只是将数据写到 buffer(缓
冲区 )中,并没有将更新的数据真正的写入到数据库中,只有
当我们调用 Recordset对象的 Update方法时,更新后的数据才
会真正的写入数据库。
最后,不要忘了加上 Response.Redirect”vote.asp” 这行程
序语句,转向链接回投票程序网页 vote.asp去显示最新的投
票结果。
如果我们将第四个指定锁定类型的参数,依然指定类
型值为 1,则程序将会出现下图的错误:
为什么会出现错误呢,因为若指定锁定类型的参数类
型值为 1,则我们将无法使用 Recordset对象的 AddNew、
Delete与 Update方法,但是我们要更新投票票数就得
用到 Recordset对象的 Update方法啊,所以参数类型
值为 1不能用,那我们可不可以指定参数类型值为 2?
当然可以,只是 我 偏好喜欢指定参数类型值为 3(因
为笔者天性乐观?),那可不可以指定参数类型值为
4?我们更新的数据只有一栏还不至于要进行批处理
锁定啦!
投票结果储存程序,votesave.asp”,在本程序中完
全没有网页数据的显示,本程序只负责将投票程序网
页中,所传达过来的投票数据更新到数据库中,然后
将链接转向回投票程序网页。