ASP基础教程 数据库查询语言 ActiveX 组件 常用的ASP ActiveX 组件
ASP基础教程:
数据库查询语言
ActiveX 组件、常用的ASP ActiveX 组件
原定计划从本篇开始就要给大家介绍 ASP 内建的 ActiveX 组件,但是考虑到我们在往后的学习中将会接触到大量的数据库查询,因此作者临时决定花一到两篇的篇幅向大家简要介绍一些数据库查询语言的基本知识,这其实也是学习 ASP 所必须掌握的一门知识。是否能够灵活地运用数据库查询语言,将直接关系到 ASP 程序的执行效率等一系列问题,所以请各位务必重视。
相信很多朋友都听说过 SQL 这个名字,如果你是计算机方面的行家,SQL 的大名一定是如雷贯耳。那么 SQL 究竟是什么呢?SQL 一词实际上是 "Structured Query Language" 结构式查询语言的缩写,是用于对存放在计算机数据库中的数据进行组织、管理和检索的一种工具;是一种特定类型的数据库 -- 关系数据库。而控制这种数据库的计算机程序就是我们常说的 DBMS-- 数据库管理系统。譬如:SQL Server、Oracle、Sybase、DB2 等等。当用户想要检索数据库中的数据时,就通过 SQL 语言发出请求,接着 DBMS 对该 SQL 请求进行处理并检索所要求的数据,最后将其返回给用户,此过程被称作为数据库查询,这也就是数据库查询语言这一名称的由来。
SQL 并不是象 C、COBOL 和 Fortran 语言那样的完整的计算机语言。SQL 没有用于条件测试的 IF 语句,也没有用于程序分支的 Goto 语句以及循环语句 For 或 Do。确切的讲,SQL 是一种数据库子语言,SQL 语句可以被嵌入到另一种语言中,从而使其具有数据库存取功能。SQL 也非严格的结构式语言,它的句法更接近英语语句,因此易于理解,大多数 SQL 语句都是直述其意,读起来就象自然语言一样明了。SQL 还是一种交互式查询语言,允许用户直接查询存储数据,利用这一交互特性,用户可以在很短的时间内回答相当复杂的问题,而同样问题若让程序员编写相应的报表程序则可能要用几个星期甚至更长时间。 在大部分 ASP 应用程序中我们都会接触到数据库,而我们在编写 ASP 应用程序时用来进行数据库操作的标准语法正是 SQL,因此 SQL 语法的重要性是不言而喻的。下面,我们就从最常用的 SQL 语句 SELECT 着手,一步一步地来学习 SQL。
查询是 SQL 语言的核心,而用于表达 SQL 查询的 SELECT 语句则是功能最强也是最为复杂的 SQL 语句,它从数据库中检索数据,并将查询结果提供给用户。在本文中我们将建立一个名为 tianjiao 的简单数据库,该库中存放了一个叫 sales 的销售记录表,如下所示 :
姓名性别工资销售目标销售额地区书生男250080009000上海吴冠军男3000100009999北京雷鸣男2000800010000四川雪儿女250050006000广州顾一男260090009800大连阿卓女200040004000天津熠天男40002000020000全国
在该表中有六列即六个字段 : 姓名、性别、工资、销售目标、销售额、地区,首先我们用 Select 语句列出姓名、销售目标和销售额 :
Select 姓名,销售目标,销售额 From sales
结果如下 : 姓名销售目标销售额书生80009000吴冠军100009999雷鸣800010000雪儿50006000顾一90009800阿卓40004000熠天2000020000
然后,我们再列出所有男性的姓名、销售目标和销售额 :
ASP基础教程 数据库查询语言 ActiveX 组件 常用的ASP ActiveX 组件
Select 姓名,销售目标,销售额 From sales Where 性别 =" 男 "
结果如下 :姓名销售目标销售额书生80009000吴冠军100009999雷鸣800010000顾一90009800熠天2000020000
接下来,我们做一个相对复杂的查询,列出销售额大于销售目标的所有男性的姓名、销售目标和销售额,并且按销售目标排序。 Select 姓名,销售目标,销售额
Form sales
Where 销售额 >销售目标
And 性别 =" 男 "
Order By 销售目标
结果如下 : 姓名销售目标销售额书生80009000雷鸣800010000顾一90009800熠天2000020000 大家可以看到,对于简单查询,SQL Select 语句和英文语法很相象,我们来分析一下 SELECT 语句的完整格式,它包括六个子句,其中 SELECT 和 FROM 子句是必须的,其它子句可以任选,每个子句的功能如下 :
1、Select 子句列出所有要求 SELECT 语句检索的数据项。它放在 SELECT 语句开始处,指定此查询要检索的数据项。这些数据项通常用选择表表示,即一组用“,”隔开的选择项。按照从左到右的顺序,每个选择项产生的一个列的查询结果,一个选择项可能是以下项目:
(1)、列名:标识 FROM 子句指定表中的列。如果列名作为选择项,则 SQL 直接从数据库表中每行取出该列的值,再将其放在查询结果的相应行中。
(2)、常数:指定在查询结果的每行中都放上该值。
(3)、SQL 表达式:说明必须将要放入查询结果中的值按表达式的规定进行计算。
2、From 子句列出包含所要查询数据的表,它由关键字 FROM 后跟一组用逗号分开的表名组成。每个表明都代表一个包括该查询要检索数据的表。这些表称为此 SQL 语句的表源,因为查询结果都源于它们。
3、Where 子句告诉 SQL 只查询某些行中的数据,这些行用搜索条件描述。
4、Group By 子句指定汇总查询,即不是对每行产生一个查询结果,而是将相似的行进行分组,再对每组产生一个汇总结果。
5、Having 子句告诉 SQL 只产生有 Group By 得到的某些组的结果,和 Where 子句一样,所需要的组也用一个搜索条件指定。
6、Order By 子句将查询结果按一列或多列中的数据排序。如果省略此子句,则查询结果将是无序的。 下面作者将提供一个简单但实用的运用 SQL 语句查询的 ASP 程序供大家参考。
为了使大家更清楚更直接地了解 SQL 语法在 ASP 中的应用,我们先将查询的所有核心过程写成一个名为 query2table 的 SUB,然后利用 ASP 的服务器端包容功能调用该 SUB。请将以下语句剪贴到记事簿,保存为 subdbtable.inc 文件,并置于虚拟目录 asptest 下 :
< %
sub query2table(inputquery)
set conntemp=server.createobject("adodb.connection")
conntemp.open "DSN=Student;uid=student;pwd=aspmagic"
set rstemp=conntemp.execute(inputquery)
ASP基础教程 数据库查询语言 ActiveX 组件 常用的ASP ActiveX 组件
howmanyfields=rstemp.fields.count -1
\' 统计数据库中的列数 %> < table border=1>< tr> < % for i=0 to howmanyfields %> < td>< b>< %=rstemp(i).name%>< /B>< /TD> < % next %> < /tr> < % do while not rstemp.eof %> < tr>
< % for i = 0 to howmanyfields
thisvalue=rstemp(i)
If isnull(thisvalue) then thisvalue="?
\' 如果字段为空,则将变量 thisvalue 的值定义为一个空格 end if%> < td valign=top>< %=thisvalue%>< /td> < % next %> < /tr> < %rstemp.movenext loop%> < /table> < %
rstemp.close
set rstemp=nothing
conntemp.close
set conntemp=nothingend sub%>
完成了 SUB 的定义过程,在下面几个 ASP 程序中我们只要加入想要使用的 SQL 查询语句,并调用该过程就可以非常方便的得到查询结果。将以下四段代码分别保存为 asp11a.asp、asp11b.asp、asp11c.asp、asp11d.asp 四个 .asp 文件。
< HEAD>< TITLE>asp11a.asp< /TITLE>< /HEAD>
< HTML>< body bgcolor="#FFFFFF">
< % call query2table("select * from publishers where name like \'A%%\'")
\' 将表 publishers 中所有姓名中有字母 A 的记录查询出来
%>
< !--#include virtual="/asptest/subdbtable.inc"-->< /BODY>< /HTML>
< HEAD>< TITLE>asp11b.asp< /TITLE>< /HEAD>< HTML>< body bgcolor="#FFFFFF">
< %
call query2table("select * from titles where Year_Published >= 1998")
\' 将表 titles 中所有发表年份大于或等于 1998 年的记录查询出来
ASP基础教程 数据库查询语言 ActiveX 组件 常用的ASP ActiveX 组件
< !--#include virtual="/asptest/subdbtable.inc"-->< /BODY>< /HTML> < HEAD>< TITLE>asp11c.asp< /TITLE>< /HEAD>< HTML>< body bgcolor="#FFFFFF">
< % call query2table("select * from publishers where amount>10000 and sex=\'male\'")
\' 将表 publishers 中所有数量大于 10000 且性别为男的记录查询出来
%>
< !--#include virtual="/asptest/subdbtable.inc"-->< /BODY>< /HTML>
< HEAD>< TITLE>asp11d.asp< /TITLE>< /HEAD>< HTML>< body bgcolor="#FFFFFF"> < % call query2table("select * from publishers where state< >\'NY\'")
\'将表 publishers 中所有所在城市不为纽约的记录查询出来。
%>
< !--#include virtual="/asptest/subdbtable.inc"-->< /BODY>< /HTML>
利用 subdbtable.inc 文件中的所定义的过程 query2table,你就可以非常迅速地对数据库进行查询,你所要做的只是将“conntemp.open "DSN=Student;uid=student;pwd=aspmagic"”中的数据库名称、用户身份和密码稍加改动,并在调用 query2table 时输入想要使用的 SQL 查询语句即可。是不是很简单 ? 这就是 ASP 和 SQL 的魅力所在 !!!
今天,我们虽然用了一整篇的篇幅只学习了一个 SQL 指令,但请你相信你所获得远不同于一个 DOS 指令,SELECT 指令使得你可以非常容易地对数据库进行查询,或许在这之前你对数据库查询还一无所知,但是通过本篇的学习,你其实已经会使用 ASP 进行常用的数据库查询了,是不是很激动 ? 在下一篇中,作者将继续给大家介绍 SQL 的其它几个基本指令。
在本篇的开头,我要感谢一些朋友来信给我指出了前几篇文章中的错误。不知大家是否记得在第八篇中我举了一个简单的利用 Application 制作的页面访问计数器?有位朋友来信问我,为何当他改变计数器起始变量 NumVisits 的值后对最后的记数结果没有任何作用?起初我也大惑不解,让我们来回忆一下这段源程序,如下: < %
Dim NumVisits
NumVisits=0
Application.Lock
Application("NumVisits") = Application("NumVisits") + 1
Application.Unlock
%>
欢迎光临本网页,你是本页的第 < %= Application("NumVisits") %>位访客 !
在这段程序中,如果你试图通过改变变量 NumVisits 的值来改变记数器结果,是绝对办不到的。因为用变量的值去改变 Application 的值是不可以的,这两者是不相关的。所以这里对变量的定义和赋值都是多余的。那么我们究竟应该如何来给 Application("NumVisits") 定义一个初始值呢?请看以下修正后程序: < %
If Application("NumVisits")< 999 then
Application("NumVisits")=999
End If
Application.Lock
Application("NumVisits")=Application("NumVisits")+1
Application.Unlock
ASP基础教程 数据库查询语言 ActiveX 组件 常用的ASP ActiveX 组件
欢迎光临本网页,你是本页的第 < %= Application("NumVisits") %>位访客 !
这里的 999 就是你要设定的计数器初始值,如此一来问题就迎刃而解了。我非常感谢这位姓康的朋友给我指出了这个错误,虽然这只是一个很小的漏洞,但我们在共同学程序写程序的过程中非常需要这种严谨细致的作风,希望今后朋友们们一旦发现文中的错误即刻来信告知,我也能及时纠正,谢谢。
SQL 语言可以分为两大部分:数据定义语言和数据操纵语言,继上一篇我们学习了数据操纵语言中的 Select 语句后,今天作者要继续给大家简要介绍其余的 SQL 语句。
SQL 是一种完备的数据处理语言,不仅用于数据库查询,而且用于数据库中的数据修改和更新,与支持 SQL 查询的 Select 语句的复杂性相比较,更改数据库内容的 SQL 语句就格外简单。然而对于一个 DBMS 来说,数据更新所造成的风险大大超出了数据查询。数据库管理系统必须在更改期内保护所存储的数据的一致性,确保有效的数据进入数据库,数据库必须保持一致性, DBMS 还必须协调多用户的并行更新,以确保用户和他们的更改不至于影响其他用户的作业。
用于修改数据库内容的 SQL 语句主要有以下三个:
1、 Insert,向一个表中加入新的数据行
2、 Delete,从一个表中删除数据行
3、 Update,更改数据库中已经存在的数据
首先我们来看看 Insert 的用法:
标准语法:
INSERT INTO table_name
(col1, col2...)
VALUES(value1, value2...)
下例要将书生作为一个新的销售员加入表 Salesreps 中
Insert Into
Salesreps (name,num,sales,hire_date,income)
values (\\\'shusheng\\\',9,10000,\\\'23-Feb-99\\\',2000)
在此语句中,列的名称列在括号中以逗号隔开,接下去是 Value 短语和括号中同样以逗号隔开的每列数据,应该注意的是数据和列名称的顺序是相同的,而且若是字符串型则以单引号隔开。从概念上来讲, Insert 语句建立的一个与表列结构相一致的数据行,用取自 Values 子句的数据来填充它,然后将该新行加入表中,表中的行是不排序的,因此不存在将该行插入到表的头或尾或两行之间的这个概念。 Insert 语句结束后,新行就是表的一部分了。
Insert 语句还可以将多行数据添加到目标表中去,在这种形式的 Insert 语句中,新行的数据值不是在语句正文中明确地指定的,而是语句中指定的一个数据库查询。添加的值来自数据库自身的行,这乍看起来似乎有些奇怪,但是在某些特定的状态下,这是非常有用的。比如,你想把 1998 年 12 月 30 日之前产生的订单编号、日期和数目从 order 表中拷贝到另一个名为 oldorder 的表中去,多行 Insert 语句为拷贝数据提供了一种紧凑而高效的方法,如下:
Insert into oldorder (Num,Date,Amount)
Select Num,Date,Amount
From order
Where Date<\\\'30-12-98\\\'
ASP基础教程 数据库查询语言 ActiveX 组件 常用的ASP ActiveX 组件
这条语句看起来有些复杂,其实很简单,语句标识了接收新行的表 oldorder 和接收数据的列,完全类似于单行 Insert 语句。语句的剩余部分是一个查询,它检索 order 表中的数据。 SQL 先执行对 order 表的查询,然后将查询结果逐行插入到 oldorder 表中去。
下面我们来看看 Update 的用法, Update 语句用于更新单表中选定行的一列或多列的值。要更新的目标表在语句中定义, Set 子句则指定要更新哪些列并计算他们的值。 Update 语句总是包含 Where 语句,而且 Update 语句比较危险,所以您必须明确地认识到 Where 语句的重要性, Where 语句被用来指定需要更新的行。
标准语法: UPDATE table_name SET columnname1 = value1 [, columname2 = value2]... WHERE search_condition 以下是一个简单的 Update 语句的例子 : Update customers Set credit=100000.00,id=99 Where name=\\\'asp\\\'
在此例中我们将表 customers 中客户名为 asp 的客户的信贷值更新为 10 万并将他的 ID 变更为 99。再看下例:
Update customers
Set credit=200000.00,state=021
Where ID in (80,90,100,120)
我们可以发现,其实 SQL 处理 Update 语句的过程就是逐行遍历所指定的表,更新其搜索条件结果为“真”的行,跳过其搜索条件结果为“假”或“空”的行。
最后,来看看 Delete 语句。
标准语法:
DELETE FROM tablename
WHERE condition
由于它过于简单,所以所造成的后果也是严重的,虽然其中的 Where 子句是任选的,但它几乎总是存在的,若将 Where 子句从 Delete 语句中省略掉,则目标表的所有行都将被删除。看下例: Delete from order Where ID=99
在文章的末尾,作者在给大家简要介绍一下数据定义语言。它是用来创建和修改数据库结构的一种语句,包括 Create 和 Drop 语句。
1、 Create 语句 标准语法: CREATE TABLE table_name ( field1 datatype [ NOT NULL ], field2 datatype [ NOT NULL ], field3 datatype [ NOT NULL ]...)
如:
CREATE TABLE BILLS
( NAME CHAR(30),
ASP基础教程 数据库查询语言 ActiveX 组件 常用的ASP ActiveX 组件
AMOUNT NUMBER,
ACCOUNT_ID NUMBER)
尽管 Create Table 比前面介绍的语句难理解一些,但仍然很直观。它将 bills 赋予一个新表,并指定表中三列的名称和数据类型。表被建立后我们就可以添入数据了。如:
Insert into bills(name,amout,account_id) values(\\\'gates\\\',100,1)
如果,你觉得不再需要保存产品信息,则可用 Drop table 语句将该表及其所包含的所有数据从数据库中删除掉。
标准语法:
DROP TABLE table_name
至此,我们已经了解了所有常用的 SQL 语句,可别小看这些貌似英文的简单语句,它们的功能十分强大,当我们编写 asp 程序时必须使用他们对数据库进行操作。从下一篇开始,作者将给大家介绍 ASP 的内建 ActiveX 组件,敬请关注。
ASP基础教程:ActiveX 组件
当你用 ASP 编写服务器端应用程序时,必须依靠 ActiveX 组件来强大 Web 应用程序的功能,譬如:你需要连接数据库,对数据库进行在线操作等等,本文从本篇开始将陆续给大家介绍 ASP ActiveX 组件的使用方法。
从今天开始我们将正式学习 ASP 的精华部分 --ActiveX 组件。事实上,当你用 ASP 编写服务器端应用程序时,必须依靠 ActiveX 组件来强大 Web 应用程序的功能,譬如:你需要连接数据库,对数据库进行在线操作或者对 WEB 服务器上的文件系统进行操作,亦或你需要一个 WEB 广告交换程序,所有这一切你都必须通过调用 ASP 内建的 ActiveX 组件或自己编写所需的组件来完成。
那么,究竟什么是 ActiveX 组件呢?它又是如何运作的呢?其实 ActiveX 组件是一个存在于 WEB 服务器上的文件,该文件包含执行某项或一组任务的代码,组件可以执行公用任务,这样就不必自己去创建执行这些任务的代码。例如,股票行情收报机组件可以在 Web 页上显示最新的股票报价。当你在 WEB 服务器上安装完 ASP 环境后,就可以直接使用它自带的几个常用组件,如 Database Access 组件。当然你也可以从第三方开发者处获得可选的组件 , 也可以编写自己的组件。你可以利用组件作为脚本和基于 Web 应用程序的基本构造块,只要知道如何访问组件提供的对象,即使你是位编写脚本的新手,也可以在不了解组件运作方式的情况下编写 ASP 程序。总而言之, ActiveX 组件使您不用学习复杂的编程就能够写出强大的 WEB 服务器端脚本。如果您是位 Web 应用程序的开发者,可以使用任何支持组件对象模型(COM)的语言来编写组件,如, C、 C++、 Java 或 Visual Basic。如果你熟悉 COM 编程, ActiveX 组件就是 Automation 服务器。但是要在 Web 服务器上运行, ActiveX 组件不能有图形用户接口元素,如 Visual Basic 的 MsgBox 函数。组件是可以重复使用的。在 Web 服务器上安装了组件后,就可以从 ASP 脚本、 ISAPI 应用程序、服务器上的其他组件或由另一种 COM 兼容语言编写的程序中调用该组件。 那么我们在 ASP 中应该如何调用组件呢?如前所述,组件是包含在动态链接库 (.dll) 或可执行文件 (.exe) 中的可执行代码。组件可以提供一个或多个对象以及对象的方法和属性。要使用组件提供的对象,我们首先要创建对象的实例并将这个新的实例分配变量名。使用 ASP 的 Server.CreateObject 方法可以创建对象的实例。接着,使用脚本语言的变量分配指令为对象实例命名。创建对象实例时,必须提供实例的注册名称“PROGID”。如下要创建一个 Ad Rotator 对象的实例 :
<% Set MyAds = Server.CreateObject("MSWC.AdRotator") %>
ASP基础教程 数据库查询语言 ActiveX 组件 常用的ASP ActiveX 组件
我们必须使用 ASP 的 Server.CreateObject 方法来创建对象实例,否者 ASP 无法跟踪脚本语言中对象的使用。
使用 HTML< OBJECT>标签同样可以创建对象实例,但必须为 RUNAT 属性提供服务器值,同时也要为将在脚本语言中使用的变量名提供 ID 属性组。使用注册名 (PROGID) 或注册号码 (CLSID) 可以识别该对象。下面的例子使用注册名 (PROGID) 创建 Ad Rotator 对象的实例:
<OBJECT RUNAT=Server ID=MyAd PROGID="MSWC.AdRotator">< /OBJECT>
下面列出了 ASP 可安装的常用组件。
Ad Rotator 创建一个 AdRotator对象,该对象可按指定计划在同
一页上自动轮换显示广告。
Browser Capabilities 创建一个 BrowserType对象,该对象决定访问 Web 站
点的每个浏览器的性能、类型及版本。
Database Access
Content Linking
File Access 组件 提供用 ActiveX Data Objects (ADO) 对数据库的访问。 创建一个 NextLink 对象,该对象可生成 Web 页内容列表,并象书一样将各页顺续连接。 提供文件的输入输出访问。
Collaboration Data 可以快速、简便的在 Web 页上添加收发邮件功能。该
Objects for NTS 组件 组件只适用于 Internet Information Server for
Windows NT? Server 。
MyInfo
Counters
Content Rotator
Page Counter 创建一个 MyInfo对象,该对象追踪个人信息,例如站点管理员的姓名、地址及显示选择。 创建一个 Counters对象,该对象可以创建、保存、增加或检索任意数量的独立计数器。 自动翻转 Web 主页上的 HTML 内容字符串。 记录并显示 Web 页被打开的次数。
现在 WEB 广告几乎充斥了整个网络,那么究竟如何在你自己的网站上建立一个符合广告领域标准功能的广告系统呢?答案是利用 ASP AD Rotator 组件 ! 它允许在每次访问 ASP 页面时在页面上显示新的广告,并且提供了很强的功能,例如 : 旋转显示在页面上的广告图象的能力、跟踪特定广告显示次数的能力以及跟踪客户端在广告上单击次数的能力。 AD Rotator 组件的工作是通过读取 AD Rotator 计划文件来完成的,该文件包括与要显示的图象文件的地点有关的信息以及每个图象的不同属性,下面就是一个标准的 AD Rotator 计划文件 : ---ADROT.TXT--- REDIRECT /scripts/adredir.asp WIDTH 440 HEIGHT 60 BORDER 1 * ads/homepage/chinabyte.gif http:/// Check out the IT site 2
ads/homepage/gamichlg.gif
ASP基础教程 数据库查询语言 ActiveX 组件 常用的ASP ActiveX 组件
- Sponsored by Flyteworks 3 ads/homepage/asp.gif http:// http:/// Good ASP site on net 3 ads/homepage/spranklg.gif http:///
The #1 Sports site on the net
2
该段代码的前四行包含广告的全局设置。 Redirect 行指出广告将成为其热连接的 URL, 注意这里不是为广告本身指定的 URL,而是将调用的中间页面的 URL,这样我们就可以通过这个中间页面跟踪单击广告的次数。该 Redirect URL 将与包含两个参数的查询字符串一起调用 : 特定广告主页的 URL 和图象文件的 URL。星号上面的其余三行简单说明如何显示广告。前两行以像素为单位指定网页上广告的宽度和高度,默认值是 440 和 60 个像素。后一行,同样是以像素为单位指定广告四周超链接的边框宽度 , 默认值是 1 个像素。如果将该参数设置为 0,则将没有边框。
星号下面的行以每四行为一个单位描述每个广告的细节。在此例中共有 16 行,描述四个广告。每个广告的描述包含图象文件的 URL、广告的主页 URL(如果广告客户没有主页,请在该行写上一个连字符“-”,指出该广告没有链接)和图象的替代文字以及指定该页与其他页交替显示频率的数值。
图象是重定向页面的热连接,它在查询字符串中设置了两个值, url=/scripts/adredir.asp 以及 image=/ads/homepage/asp.gif。要确定广告显示的频率,可以将计划文件中所有广告的权值相加,在该例中总数是 10,那么 aspallian 的广告权值为 3,这意味着 AdRotator 组件每调用十次,它则显示 3 次。
重定向文件是用户创建的文件。它通常包含用来解析由 AdRotator 对象发送的查询字符串的脚本并将用户重定向到与用户所单击的广告所相关的 URL。用户也可以将脚本包含进重定向文件中,以便统计单击某一特定广告的用户的数目并将这一信息保存到服务器上的某一文件中。增加计数器和重定向用户是通过下面两行 ASP 脚本来实现的 : < % Counter.Increment(request.querystring("url"))
response.redirect(request.querystring("url"))
%>
现在我们看一下 Ad Rotator 组件是如何在页面中使用的,首先必须使用 Server.CreateObject 方法实例化 Ad Rotator 对象。 Ad Rotator 组件的 PROGID 属性是 MSWC.AdRotator。完整的代码如下 : < % Set ad = Server.CreateObject("MSWC.AdRotator") %>
< %= ad.GetAdvertisement("/ads/adrot.txt") %>
Ad Rotator 组件支持的唯一方法是 GetAdvertisement,它只有一个参数 :AdRotator 计划文件的名称。注意指向文件的路径是从当前虚拟目录的相对路径,物理路径是不允许的。 GetAdvertisement 方法从 Rotator 计划文件中获取下一个计划广告的详细说明并将其格式化为 HTML 格式。下面的 HTML 由 GetAdvertisement 方法生成且被添加到网页的输出中,以便显示 Rotator 计划文件中的下一个广告。 < A HREF="http:///scripts/adredir.asp?http:///">< IMG SRC="http:///ads/homepage/asp.gif" ALT="Good ASP site on net" WIDTH=440 HEIGHT=60 BORDER=1>< /A>
ASP基础教程 数据库查询语言 ActiveX 组件 常用的ASP ActiveX 组件
使用 AdRotator 组件我们可以直接通过对象属性而不是计划文件中的设置来直接控制某些广告特性,其可用属性如下 :
Border 指定广告边框的大小。
Clickable 指定广告是否为超链接。
TargetFrame 指定显示广告的框架的名称。 < % Set ad = Server.CreateObject("MSWC.AdRotator") ad.Border = 0 ad.Clickable = true ad.TargetFrame = AdFrame
ad.GetAdvertisement("/ads/adrot.txt")
%>
通过上面的学习,相信你已经能够熟练运用 ASP 的内建 AdRotator 组件为自己的网站建立一个标准的广告显示程序了。你是否难以相信一切竟是如此的简单?其实真正能令你震惊的还在后头呢,敬请关注下一篇 ASP ActiveX 组件大揭密!
当你用 ASP 编写服务器端应用程序时,必须依靠 ActiveX 组件来强大 Web 应用程序的功能,譬如:你需要连接数据库,对数据库进行在线操作等等,继上篇介绍了 AD Rotator 组件后,本篇将接着给大家介绍其它一些常用的 ASP ActiveX 组件的使用方法。
最近仍有不少朋友来信问我, ASP 是否只能在 Microsoft IIS 上运行,是否可以在非 NT 平台上运作?本来这个问题我已经回答过很多遍了 : 我只是听说过有某种可以支持的软件,却从没见过。但一些热情的朋友仍然孜孜不倦地来信询问,于是在朋友们的盛情之下,我访遍了ASP 相关站点,竟惊奇的发现,原来 ASP 的确是可以运行在其它非 NT 平台上的,因此在本篇的开头,我就给来信的朋友们简要介绍一下如何在非 NT 平台上使用 ASP。
要在非 NT 平台上开发并运行 ASP 应用程序我们可以依赖于一套名为 Instant ASP 的第三方软件,它的广告标语非常吸引人“ASP Anytime, Anywhere”,我想所有 ASP 的开发者们看到如此的标语必然兴奋不已。这套由 Halcyon 软件公司开发的软件使得你无需重复开发原有 ASP 应用程序即可以将它运行在任何操作平台上 ! 这样非但节省了大量的开发时间,而且使得 ASP 真正成为了一种跨平台的 Internet、 Intranet 或 Extranet 应用程序。 Instant ASP 本身其实是一套基于 Java 的应用程序,因此通过它你可以将基于 WEB 的 ASP 应用程序运行在任何平台上,下表列出了Instant ASP 目前版本所支持的操作平台。
ASP基础教程 数据库查询语言 ActiveX 组件 常用的ASP ActiveX 组件
更令人吃惊的是 Instant ASP 不仅提供了 ASP 的运作环境,而且它较目前市场上的 ASP 应用还提供了更为强大和实用的功能,它将 ActiveX 组件和 Enterprise Java Beans 或者 CORBA-compliant objects 组合起来,从而使ASP 有了更为广泛的应用。它同样提供了通过 ADO 接口访问连接各种数据库,并生成动态页面的强大功能。对于开发者而言可以使用自己擅长的编程语言或工具如 :Visual Basic, JScript, VBScript, C++, Java, HTML, Delphi , MS Visual InterDev 等等来进行开发。关于 Instant ASP 具体安装和操作我就不在这里展开了,有兴趣的朋友可以到它的站点上去看看 http://,你还可以免费下载一个试用版试试。
继上一篇中作者给大家介绍了 AD Rotator 组件的使用方法后,今天我们接着来看看其它的一些 ASP 常用组件。
一、 Database Access 组件
我们在 WEB 服务器上运用 WEB 应用程序进行的最常见和最实用的任务就是访问服务器端的数据库。而 ASP 内建的 Database Access 组件使得我们能够轻而易举地通过 ActiveX Data Objects (ADO) 访问存储在服务器端的数据库或其他表格化数据结构中的信息。 ADO 是对当前微软所支持的数据库进行操作的最有效和最简单直接的方法,它是一种功能强大的数据访问编程模式,从而使得大部分数据源可编程的属性得以直接扩展到你的 Active Server 页面上。可以使用 ADO 去编写紧凑简明的脚本以便连接到 Open Database Connectivity (ODBC) 兼容的数据库和 OLE DB 兼容的数据源,这样 ASP 程序员就可以访问任何与 ODBC 兼容的数据库,包括 MS SQL SERVER、Access、 Oracle 等等。如果您是一个对数据库连接有一定了解的脚本编写人员,那么您将发现ADO 命令语句并不复杂而且容易掌握。同样地,如果您是一个经验丰富的数据库编程人员,您将会正确认识 ADO 的先进的与语言无关性和查询处理功能。熟悉 VB 数据库编程的朋友会发现 ADO 与 RDO (Remote Data Objects) 有某种类似的地方。但据说 ADO 的访问的速度更快,内存需要更小。
下面给大家简要介绍一下利用 ASP 的 Database Access 组件通过 ADO 连接并操作 WEB 数据库的步骤
第一步 : 指定想要连接的数据库,有 DSN 和 DSN-less 两种方法。
DSN(Data Source Name 数据源名称 ): 建立一个系统数据源名称,方法如下 :
1、单击“开始”,选设置控制面板。
ASP基础教程 数据库查询语言 ActiveX 组件 常用的ASP ActiveX 组件
2、双击图标“32 位 ODBC” , 将弹出一个对话框,选标签“System DSN”
3、单击“Add”添加一个 DSN 入口 , 选择如“Microsoft Access Drive”并确认。
4、在“Data Source Name”栏里输入你希望指定的 DSN, 然后单击“Select”选择数据库
存放位置,你可以按“Browse”来选取。
5、以上步骤完成后在 ASP 程序中指定 DSN,如下 :
< %connstr = "DSN"%>
DSN-less: 是另一种通过在 ASP 文件里直接指定数据库文件所在位置,而无需建立 DSN 的 方法。由于许多公司没有自己的 WEB 服务器,他们的网站往往是存放在远端的虚拟服务器上,因此 要建立和修改 DSN 的设置比较麻烦。而使用 DSN-less 方法直接指定远端数据库所在位置恰恰解决了 这一问题,方法如下 : < % connstr = "DBQ="+server.mappath("database/source.mdb")+"; DefaultDir=;DRIVER={MicrosoftAccessDriver(*.mdb)}; DriverId=25;FIL=MSAccess; ImplicitCommitSync=Yes; MaxBufferSize=512; MaxScanRows=8; PageTimeout=5; SafeTransactions=0; Threads=3; UserCommitSync=Yes;"
%>
在指定了想要连接的数据库后,就可以通过以下方法连接并打开数据库 : < % Set Conn = Server.CreateObject("ADODB.Connection")Conn.Open constr
%>
第二步 : 指定想要执行的 SQL 指令,可以使用 RecordSet。
当连接了数据库后就可以对数据库进行操作,比如查询、删除、更新等等,这些操作都是通过SQL 指令来完成的,如下例在数据库表 datebase 中查询所有姓名中有“A”的记录 : < % sql="select * from datebase where name like \'A%%\'" Set rs = Conn.Execute(sql)
%>
尽管 Connection 对象简化了连接数据库和查询任务,但 Connection 对象仍有许多不足。确切地说,检索和显示数据库信息的 Connection 对象不能用于创建脚本,您必须确切知道要对数据库作出的更改,然后才能使用查询实现更改。对于检索数据、检查结果、更改数据库, ADO 提供了 Recordset 对象。正如它的名称所暗示的那样, Recordset 对象有许多您可以使用的特性,根据您的查询限制,检索并且显示一组数据库行,即记录。 Recordset 对象保持查询返回的记录的位置,允许您一次一项逐步扫描结果。根据 Recordset 对象的指针类型属性设置,您可以滚动和更新记录。数据库指针可以让您在一组记录中定位到特定的项。指针还用于检索和检查记录,然后在这些记录的基础上执行操作。 Recordset 对象有一些属性,可用于精确地控制指针的行为,提高您检查和更新结果的能力。
ASP基础教程 数据库查询语言 ActiveX 组件 常用的ASP ActiveX 组件
Recordset 的使用方法如下 :
Set rs = Server.CreateObject("ADODB.Recordset") rs.Open SQL 指令 , Conn, 1, 1 \' 读取 或 rs.Open SQL 指令 , Conn, 1, 3 \' 新增、修改、或删除
第三步 : 使用 RecordSet 属性和方法,并显示执行的结果。
通过以上指令,我们创建了一个包含数据的游标 (RecordSet)“rs”,事实上游标是存储在活动内存中的类似记录和字段的数组的东西,当通过 RecordSet 组件创建一个游标时,它从数据提供者的得到一个数据集,并用它来充实游标,我们可以想象 ADO 产生的 RecordSet 是一个象电子表格的记录,它有一行行的记录,在任何时候都有一行是它的当前行,而 RecordSet 的字段是用 RecordSet 的 Field 集合表示的。下面列出了所创建的 RecordSet 对象 ( 游标 ) 的一些属性和方法 :
rs.Fields.Count: RecordSet 对象的字段总数。
rs(i).Name: 第 i 个字段的名称, i 由 0 算起到 rs.Fields.Count-1。
rs(i): 读取第 i 个字段的数据, i 由 0 算起到 rs.Fields.Count-1。
rs(" 字段名称 "): 读取指定字段的数据。
rs.RecordCount: 游标中的数据记录总数。
rs.EOF: 是否已指到最后一条记录。
rs.MoveNext: 将指标移到下一笔记录。
rs.MovePrev: 将指标移到上一笔记录。
rs.MoveFirst: 将指标移到第一笔记录。
rs.MoveLast: 将指标移到最后一笔记录。
rs.Close: 关闭 RecordSet 对象
有关 ADO 的其他介绍,作者将在今后给大家详细讲解。
二、 Content Linking 组件
如果你的网站有一系列相互关联的页面的话, Content Linking 组件将非常适合你的需求,它非但可以使你在这些页面中建立一个目录表,而且还可以在它们中间建立动态连接,并自动生成和更新目录表及先前和后续的 Web 页的导航链接。这对于列出联机报刊、电子读物网站以及论坛邮件是十分理想的选择。
Content Linking 组件创建管理 URL 列表的 Nextlink 对象,要使用 Content Linking 组件,必须需要先创建 Content Linking List 文件。 Content Linking 组件正是通过读取这个文件来获得处理我们希望链接的所有页面的信息。事实上该文件是一个纯文本文件,其内容如下 : page1.htm one page2.htm two page3.htm three
page4.htm four
page5.htm five
page6.htm six
ASP基础教程 数据库查询语言 ActiveX 组件 常用的ASP ActiveX 组件
这个文本文件的每行有如下形式 :
url description comment
其中, URL 是与页面相关的超链地址, description 提供了能被超链使用的文本信息, comment 则包含了不被 Content Linking 组馐偷淖⑹托畔ⅲ淖饔萌缤绦蛑械淖⑹汀?description 和 comment 参数是可选的。
下面我们来看看如何具体使用 Content Linking 组件 : < html>
< head> < meta http-equiv="Content-Type" content="text/html; charset=gb2312">
< title>网络电子读物宝藏 < /title>
< /head> < body> < p>网络电子读物导航 < % Set Link = Server.CreateObject("MSWC.NextLink") count = Link.GetListCount("nextlink.txt") Dim I For I=1 to count %> < ul>< li>< a href="< %= Link.GetNthURL("nextlink.txt", I) %>">< %= Link.GetNthDescription("nextlink.txt", I) %>< /a>
< % Next %>
< /body>
< /html>
在以上代码中,我们先用 GetListCount 方法确定在文件 nextlink.txt 中有多少条项目,然后利用循环语句,并使用 GetNthURL、 GetNthDescription 方法逐一将存储在 nextlink.txt文件中的内容读出并显示给客户端浏览器。
下面列出了 Content Linking 组件所有可使用的方法 GetListCount(file) 统计内容链接列表文件中链接的项目数。
GetNextURL(file) 获取内容链接列表文件中所列的下一页的 URL。
GetPreviousDescription(file) 获取内容链接列表文件中所列的上一页的说明行。
GetListIndex(file) 获取内容链接列表文件中当前页的索引。
GetNthDescription(file,index) 获取内容链接列表文件中所列的第 N 页的说明。
GetPreviousUR(file) 获取内容链接列表文件中所列的上一页的 URL。
GetNextDescription(file) 获取内容链接列表文件中所列的下一页的说明。
GetNthURL(file,index) 获取内容链接列表文件中所列的第 N 页的说明。
在我们创建了网站的总导航页面后,我们当然还希望在每一页中添加一个“上一页”、“下一页”的导航超链,下面我们就来看看如何实现导航超链。
ASP基础教程 数据库查询语言 ActiveX 组件 常用的ASP ActiveX 组件
由于考虑到你的网站可能包含了上千或更多的页面,所以我们不可能在每一个页面中都编写实现导航超链的 ASP 代码。因此,我们必须利用前几篇中所学到的服务器端包容 SSI,这样就避免了大量的重复作业,请看下例 :
< !--#include file="nextprev.inc"-->
只要将这端代码放在每个页面中即可。 nextprev.inc 文件的内容如下 : < % Set Link = Server.CreateObject("MSWC.NextLink") count = Link.GetListCount("nextlink.txt") current = link.GetListIndex("nextlink.txt")
If current >1 Then %>
< a href="< %= Link.GetPreviousURL("nextlink.txt") %>">上一页 < /a>
< %
End If
If current < count Then %>
< a href="< %= Link.GetNextURL("nextlink.txt") %>">下一页 < /a>
< % End If %>
今天的学习又到此结束了,在这里我要再次感谢所有关心我的文章的朋友们,你们的来信给了 我很大的鼓舞,不过请大家不要再称我为“老师”,其实我也和你们一样是在不断的学习和摸索中, 有问题我们可以一起探讨,我的文章中肯定还存在很多不足或漏洞,也希望大家发现后能及时向我 提出。由于近来 ASP 已经在国内的网站中广泛运用起来,所以应朋友们的要求,在国内 ASP 高手 飞鸟的热情帮助下,我决定写一些 ASP 应用实例作为现在这篇文章的姊妹篇,这样也就可以为大家 提供一些真正实用的东西了,敬请关注。