hinapub.com 下载 第12章通用数据访问 通用数据访问( Universal data access,UDA)是对 Microsoft访问多种数据源数据的策略的 称呼。不必担心,它并不是那些新的将改变我们所做的每项工作的开发技术。事实上,此时 也许我们正在使用着UDA的一部分。前面的几章已经向读者介绍了怎样用ADO来访问数据库, 尤其是关系数据库,而这就是UDA的一部分。数据以不同的形式出现,而UDA的思想就是通 过使用 OLE DB和ADO实现对数据的访问 本章将介绍什么是UDA,以及为什么要集中介绍UDA。我们将介绍以下内容: UDA如何与全球的web开发人员相适应 可访问通用数据的 OLE DB提供者 半结构化的数据的定义,如何使用这些数据 Internet发布怎样改变人们的生活。 企业界中的数据存储和ASP 实际上,本章所涉及的内容相当多且相当广泛,我们只能用较少的篇幅进行介绍。 121UDA的构想 UDA实际上就是使用相同技术来访问不同类型数据的能力。这并不是一种新思想,而是 对现有的ODBC技术的扩展。ODBC提供了一种访问关系数据库的方法,并成为跨数据库访问 的标准 虽然ODBC很成功,但也有其自身的缺点,那就是无法访问非关系数据库中的数据。当使 用ODBC访问文本文件或电子表格时,确实受到较大范围的限制。当前越来越多的数据正以 应用程序 ADO OLE DB RDBMS 目录服务 据存储 图12-1UDA的构想示意图
下载 第12章 通用数据访问 通用数据访问(Universal Data Access,U D A )是对M i c r o s o f t访问多种数据源数据的策略的 称呼。不必担心,它并不是那些新的将改变我们所做的每项工作的开发技术。事实上,此时 也许我们正在使用着U D A的一部分。前面的几章已经向读者介绍了怎样用 A D O来访问数据库, 尤其是关系数据库,而这就是 U D A的一部分。数据以不同的形式出现,而 U D A的思想就是通 过使用OLE DB和A D O实现对数据的访问。 本章将介绍什么是U D A,以及为什么要集中介绍U D A。我们将介绍以下内容: • UDA如何与全球的We b开发人员相适应。 • 可访问通用数据的OLE DB提供者。 • 半结构化的数据的定义,如何使用这些数据。 • Internet发布怎样改变人们的生活。 • 企业界中的数据存储和A S P。 实际上,本章所涉及的内容相当多且相当广泛,我们只能用较少的篇幅进行介绍。 12.1 UDA的构想 U D A实际上就是使用相同技术来访问不同类型数据的能力。这并不是一种新思想,而是 对现有的O D B C技术的扩展。O D B C提供了一种访问关系数据库的方法,并成为跨数据库访问 的标准。 虽然O D B C很成功,但也有其自身的缺点,那就是无法访问非关系数据库中的数据。当使 用O D B C访问文本文件或电子表格时,确实受到较大范围的限制。当前越来越多的数据正以 VC++ VB 脚本 应用程序 ADO RDBMS E-mail 目录服务 数据存储 OLE DB Java 图12-1 UDA的构想示意图
376Ap;高编程 Chinapub.com 下载 文档的形式存储,如金融系统、邮件系统等,而ODBC恰恰不是为访问这些数据而设计的。 同时,还有大量的传统数据不是精确符合关系数据库的格式 为了解决这个问题, Microsoft推出了UDA。实际上,UDA只是对 Microsoft多年努力的成 果的一个称呼。如果没有记错的话,我是在1994年初识 OLE DB的,即访问ODBC数据的第 个测试版本(不是很完善)。从那时起, Microsoft就开始注意扩展 OLE DB所访问的数据范围, 不仅是关系数据库,还有其他数据提供者。 使用ADO2.5可以访问不同形式的数据,但所有的数据访问都是通过相同的简单对象来实 现的。这使得数据访问变得通用化了,即同样的技术可用不同的语言实现,只要稍做修改就 可以了。 UDA的核心是 OLE DB。而 OLE DB基于ODBC,但比它更进一步。在前面第一次讨论 ADO时,我们就是利用 OLE DE提供者来访问数据存储的。为了进一步理解,看一下图12-1 这里,我们可以看到 OLE DE不仅可用于访问数据库,而且可用于访问所有不同类型的数 据。虽然现在 OLE DE大多用于访问关系数据库,但访问其他类型的数据也毫无问题 122 OLE DB提供者 是否有 OLE DB提供者是唯一限制用户访问数据的因素。如果有,那么通过一般的OLE DB或ADO命令就可以访问数据。如果产品的供应商没有编写数据提供者,那么将来设计OLE DB提供者的可能性就会很大。这是一个很简单的事情。如果想让别人使用自己的产品,必须 提供一种简易的访问数据的方法 OLE DB和ADO是为了满足多种数据类型的需要,以及为在Web方案中使用数据而开发设 计的。Web仍在不断扩展,ASP正成为Web应用程序中间层的一个重要组成部分,所以我们必 须考虑web服务器中数据的不同存储方式。 使用 OLE DB提供者可以扩展Web应用程序而不必学习新的技术,我们只需为不同类型的 数据使用不同的提供者。提供者是很多的,但这里需要研究的是那些可用来访问非关系数据 库数据的提供者。特别是,将研究集成了多种 Microsoft技术的提供者,并介绍如何在Web应 用程序中使用它们 12.2.1 Indexing Service 如果web站点为用户提供信息访问功能,那么很有可能需要为用户提供某种形式的搜索 功能。 Indexing service(索引服务)与IS集成在一起,并且有一个 OLE DB提供者可对 Indexing Service目录进行只读访问。 本书对 Indexing service的安装、使用及其高级功能不做介绍 1. Indexing Service分析 Indexing service可以说与数据库管理服务器相似。它们都拥有信息,并允许通过查询访 问信息。两者的本质区别在于数据库管理服务器,比如 SQL Server必须需要某些人往表中填 写数据,而 Indexing service自动地做了这项工作。对大多数开发人员来说,很难完全理解这 个工作过程,但至少应理解以下几点 Indexing service的最基本的组成部分是 Index条目。如果这是数据库表中的一条记录, 那么它仅是一个关键字或一个对已建立的关键字的文档的引用。这些记录可能会在数据
文档的形式存储,如金融系统、邮件系统等,而 O D B C恰恰不是为访问这些数据而设计的。 同时,还有大量的传统数据不是精确符合关系数据库的格式。 为了解决这个问题,M i c r o s o f t推出了U D A。实际上,U D A只是对M i c r o s o f t多年努力的成 果的一个称呼。如果没有记错的话,我是在 1 9 9 4年初识OLE DB的,即访问O D B C数据的第一 个测试版本(不是很完善)。从那时起,M i c r o s o f t就开始注意扩展 OLE DB所访问的数据范围, 不仅是关系数据库,还有其他数据提供者。 使用ADO 2.5可以访问不同形式的数据,但所有的数据访问都是通过相同的简单对象来实 现的。这使得数据访问变得通用化了,即同样的技术可用不同的语言实现,只要稍做修改就 可以了。 U D A的核心是 OLE DB。而OLE DB基于O D B C,但比它更进一步。在前面第一次讨论 A D O时,我们就是利用OLE DB提供者来访问数据存储的。为了进一步理解,看一下图 1 2 - 1。 这里,我们可以看到OLE DB不仅可用于访问数据库,而且可用于访问所有不同类型的数 据。虽然现在OLE DB大多用于访问关系数据库,但访问其他类型的数据也毫无问题。 12.2 OLE DB提供者 是否有OLE DB提供者是唯一限制用户访问数据的因素。如果有,那么通过一般的 O L E D B或A D O命令就可以访问数据。如果产品的供应商没有编写数据提供者,那么将来设计 O L E D B提供者的可能性就会很大。这是一个很简单的事情。如果想让别人使用自己的产品,必须 提供一种简易的访问数据的方法。 OLE DB和A D O是为了满足多种数据类型的需要,以及为在 We b方案中使用数据而开发设 计的。We b仍在不断扩展,A S P正成为We b应用程序中间层的一个重要组成部分,所以我们必 须考虑We b服务器中数据的不同存储方式。 使用OLE DB提供者可以扩展We b应用程序而不必学习新的技术,我们只需为不同类型的 数据使用不同的提供者。提供者是很多的,但这里需要研究的是那些可用来访问非关系数据 库数据的提供者。特别是,将研究集成了多种 M i c r o s o f t技术的提供者,并介绍如何在 We b应 用程序中使用它们。 12.2.1 Indexing Service 如果We b站点为用户提供信息访问功能,那么很有可能需要为用户提供某种形式的搜索 功能。Indexing Service(索引服务)与I I S集成在一起,并且有一个 OLE DB提供者可对I n d e x i n g S e r v i c e目录进行只读访问。 本书对Indexing Service的安装、使用及其高级功能不做介绍。 1. Indexing Service分析 Indexing Service可以说与数据库管理服务器相似。它们都拥有信息,并允许通过查询访 问信息。两者的本质区别在于数据库管理服务器,比如 SQL Server必须需要某些人往表中填 写数据,而Indexing Service自动地做了这项工作。对大多数开发人员来说,很难完全理解这 个工作过程,但至少应理解以下几点: • Indexing Service的最基本的组成部分是 I n d e x条目。如果这是数据库表中的一条记录, 那么它仅是一个关键字或一个对已建立的关键字的文档的引用。这些记录可能会在数据 376计计ASP 3 高级编程 下载
第2章湖用数访377 下载 库中的一个表中,而另一个表可能包含第一个表所引用的所有文档。这两个表的概念在 Indexing Service中表示为 Word List和 Saved Index 有了 Indexing Service,离散数据库就是我们所知的目录( catalog)。正如 SQL Server能处 理多个数据库一样, Indexing service也可以处理多个目录。目录一般被捆绑在主机所提 供的基于 Internet的服务上。因此,假如你有一个Web站点并用NNTP服务提供新闻组, 可以为它们提供一个目录。如果使用虚拟Web站点,它们中的每一个也可以有一个目 录 当服务启动时,他知道从哪里开始搜索索引的条目,因此他建立了一个被索引的文件列 表。我们把这项工作称为扫描。被索引的条目可以是存储于文件夹中的任何文件。文件夹通 常被设置为服务环境中的虚拟路径。这就是我们所知的作用范围。 旦扫描过程完成,过滤过程就开始了。在过滤期间, Indexing service将试图打开一个 候选文件。一旦打开该文件, Indexing service就会对此文件进行解析,并为每个关键字构 个索引条目。同时,也为文件计算其他的键参数。解析一个文件需要了解文件的结构。这 个信息收集在被称为过滤器的库文件中。 Microsoft t经开发了大多数在 Internet和 Internet服 务中常见的内容类型的过滤器 使用非标准或非 Microsoft文件格式的厂商也提供自己的过滤器。例如, Adobe公 司就为PDF文档标准提供了过滤器。因此,如果你创建了自己的文件格式,那么应该 为它定义一个过滤器。 “特征”和“文档属性”是两个需要理解的重要概念。 在某种意义上,特征( characterization)指的是文档的摘要(或执行概要)。特征通常是文档 中可表示部分的前n个字符。可表示部分一般是显示的(或表现的)文档的部分内容。比如一个 HTML页面的特征一般是指位于标记之间的内容(自然,也有例外)。 Indexing Service 允许用户决定文档的特征有多大。一般来说,250~500个词足够了。当从 Indexing Service返回 查询结果时,特征是经常显示的信息。文本的开头部分通常是显示的最佳选择,因为他可使 用户很快就能决定这个文档是否需要进行深入研究 然而,文档的大量附加信息也可以从 Indexing service的文档属性中获得。这些属性是正 式的 ActiveX文档属性。 Indexing Service说明了40多种这样的属性。文件大小、数据的创建时 间、最近访问时间、最近修改时间以及文件的位置是,ASP应用程序中对 Indexing service查 询起决定作用的最重要的属性。 Indexing Service3.0与 Index server的对比 如果你在IS3.0或40环境下开发ASP程序,也许想知道为什么要使用 Indexing service而 不是 Index server,他们不是一回事吗? 可以说是,也可以说不是。 Indexing service与 Index server完成了相同的工作,即创建了 引用文档的查询数据库。但 Indexing service带来了一些新的以及改进过的功能 那些抱怨 Microsoft在IS40环境下的 NT Workstation中删除了 Index server的人,现在可 以放心了,因为在 Windows2000 Professiona中包含 Indexing service。事实上在 Windows2000家族中,当查找文件夹或文件时, Start菜单中的査找选项就使用了 Indexing Service 现在结果集可以由 Query对象获得。利用这种方法,可以通过使用某个属性向 Indexing
库中的一个表中,而另一个表可能包含第一个表所引用的所有文档。这两个表的概念在 Indexing Service中表示为Word List和Saved Index。 • 有了Indexing Service,离散数据库就是我们所知的目录 ( c a t a l o g )。正如SQL Server能处 理多个数据库一样,Indexing Service也可以处理多个目录。目录一般被捆绑在主机所提 供的基于I n t e r n e t的服务上。因此,假如你有一个 We b站点并用N N T P服务提供新闻组, 可以为它们提供一个目录。如果使用虚拟 We b站点,它们中的每一个也可以有一个目 录。 当服务启动时,他知道从哪里开始搜索索引的条目,因此他建立了一个被索引的文件列 表。我们把这项工作称为扫描。被索引的条目可以是存储于文件夹中的任何文件。文件夹通 常被设置为服务环境中的虚拟路径。这就是我们所知的作用范围。 一旦扫描过程完成,过滤过程就开始了。在过滤期间, Indexing Service将试图打开一个 候选文件。一旦打开该文件, Indexing Service就会对此文件进行解析,并为每个关键字构建 一个索引条目。同时,也为文件计算其他的键参数。解析一个文件需要了解文件的结构。这 个信息收集在被称为过滤器的库文件中。 M i c r o s o f t已经开发了大多数在 I n t e r n e t和Internet 服 务中常见的内容类型的过滤器。 使用非标准或非M i c r o s o f t文件格式的厂商也提供自己的过滤器。例如, A d o b e公 司就为P D F文档标准提供了过滤器。因此,如果你创建了自己的文件格式,那么应该 为它定义一个过滤器。 “特征”和“文档属性”是两个需要理解的重要概念。 在某种意义上,特征 ( c h a r a c t e r i z a t i o n )指的是文档的摘要 (或执行概要)。特征通常是文档 中可表示部分的前 n个字符。可表示部分一般是显示的 (或表现的)文档的部分内容。比如一个 H T M L页面的特征一般是指位于标记之间的内容(自然,也有例外)。Indexing Service 允许用户决定文档的特征有多大。一般来说, 2 5 0 ~ 5 0 0个词足够了。当从Indexing Service返回 查询结果时,特征是经常显示的信息。文本的开头部分通常是显示的最佳选择,因为他可使 用户很快就能决定这个文档是否需要进行深入研究。 然而,文档的大量附加信息也可以从 Indexing Service的文档属性中获得。这些属性是正 式的A c t i v e X文档属性。Indexing Service说明了4 0多种这样的属性。文件大小、数据的创建时 间、最近访问时间、最近修改时间以及文件的位置是, A S P应用程序中对 Indexing Service查 询起决定作用的最重要的属性。 Indexing Service 3.0与Index Server的对比 如果你在IIS 3.0或4 . 0环境下开发A S P程序,也许想知道为什么要使用 Indexing Service而 不是Index Server,他们不是一回事吗? 可以说是,也可以说不是。 Indexing Service与Index Server完成了相同的工作,即创建了 引用文档的查询数据库。但 Indexing Service带来了一些新的以及改进过的功能。 • 那些抱怨M i c r o s o f t在IIS 4.0环境下的NT Wo r k s t a t i o n中删除了Index Server的人,现在可 以放心了,因为在 Windows 2000 Professional 中包含 Indexing Service。事实上在 Windows 2000 家族中,当查找文件夹或文件时, S t a r t菜单中的查找选项就使用了 Indexing Service。 • 现在结果集可以由 Q u e r y对象获得。利用这种方法,可以通过使用某个属性向 I n d e x i n g 第1 2章 通用数据访问计计377 下载
378 ASP3高级编程 Chinapub.com 下载 Service请求返回结果集 多种语言用于建立查询。 随同Web内容, Indexing service也维护本地文件系统中的文件的一个目录。这有点类似 于 Microsoft office中的快速查找程序 在 Index server的早期版本中,文件系统在内容索引服务开始时就被彻底扫描一次。现 在被索引的内容放在新的NTFS5文件系统中,只有改变过的文件才会被再次扫描。 协助维护 Indexing Service的三个新对象与 Query和 Utility对象协同工作,它们分别是 AdminIndex Server、 CatEd和 ScopeD对象 2.搜索索引目录 使用ADO查找目录最为不方便之处在于需要经常不断地分析用户的输入,以使查询正常 工作。分析一下查找“ ASP ADO”的工作情况。它可能有以下三种含义: 找出所有既包含ASP又包含ADO的文档。 ·找出所有包含ASP,或者包含ADO,或者包含两者的文档。 找出所有包含ASP,并且ASP后面跟有字符ADO的页面 通常,用户会假定某一种行为,除非你明确表明程序将做某些不同的事。而用户的假定 可能各不相同。更糟的是仅仅传递一个“ ASP ADO”,在ADO查询技术中会产生下面的错误 Microsoft OLE DB Provider for Microsoft Indexiing Service error 80040e 14 Incorrect Syntax near 'ADO. Expected". SQLSTATE= 42000 这就是问题的所在。多数情况下,在把查找项目包括进SQL查询之前,要把它们分解为 单个的条目和操作符。这要付出时间,如果不能达到目的,可能还需要另外的时间。在介绍 Indexing Server中的SQL语言时,我们会详细分析怎样分解输入的词组 由于 Indexing Service不是数据库,因此有两点需加以注意 Indexing Service目录是连接的数据源 Indexing Service提供者使用SQL语言的扩展。 为了显示查询 Indexing Service是多么容易,下面来创建一个web页面的例子。首先,以 搜索窗体 Searchfor html开始,如图12-2所示 service.M 和的+中·②团s由rtmw Searching The Indexing Service Using ADO Searth For: PerormSearchClear Form 1999 or Pres-PnotesgonoLA923n(sk1-651002+610) aDone 图12-2 SearchForm. html搜索窗体
S e r v i c e请求返回结果集。 • 多种语言用于建立查询。 • 随同We b内容,Indexing Service也维护本地文件系统中的文件的一个目录。这有点类似 于Microsoft Off i c e中的快速查找程序。 • 在Index Server的早期版本中,文件系统在内容索引服务开始时就被彻底扫描一次。现 在被索引的内容放在新的N T F S 5文件系统中,只有改变过的文件才会被再次扫描。 • 协助维护 Indexing Service的三个新对象与 Q u e r y和U t i l i t y对象协同工作,它们分别是 A d m i n I n d e x S e r v e r、C a t A d m和S c o p e A d m对象。 2. 搜索索引目录 使用A D O查找目录最为不方便之处在于需要经常不断地分析用户的输入,以使查询正常 工作。分析一下查找“ASP ADO”的工作情况。它可能有以下三种含义: • 找出所有既包含A S P又包含A D O的文档。 • 找出所有包含A S P,或者包含A D O,或者包含两者的文档。 • 找出所有包含A S P,并且A S P后面跟有字符A D O的页面。 通常,用户会假定某一种行为,除非你明确表明程序将做某些不同的事。而用户的假定 可能各不相同。更糟的是仅仅传递一个“ ASP ADO”,在A D O查询技术中会产生下面的错误: Microsoft OLE DB Provider for Microsoft Indexiing Service error '80040e14' Incorrect Syntax near 'ADO'. Expected '''. SQLSTATE = 42000 这就是问题的所在。多数情况下,在把查找项目包括进 S Q L查询之前,要把它们分解为 单个的条目和操作符。这要付出时间,如果不能达到目的,可能还需要另外的时间。在介绍 Indexing Server中的S Q L语言时,我们会详细分析怎样分解输入的词组。 由于Indexing Service不是数据库,因此有两点需加以注意: • Indexing Service目录是连接的数据源。 • Indexing Service提供者使用S Q L语言的扩展。 为了显示查询Indexing Service是多么容易,下面来创建一个 We b页面的例子。首先,以 搜索窗体S e a r c h F o r m . h t m l开始,如图1 2 - 2所示。 图12-2 SearchForm.html搜索窗体 378计计ASP 3 高级编程 下载
第12章通用数据访问 379 下载 相应的HTML脚本相当简单: Search For: TYPE=SUBMIT VALUE="Perform Search> TYPE=RESET VALUE="Clear Form"> 以上代码提供一个文本框,可以在其中输入搜索条件。按下 Perform Search按钮将调用 SP页面 QueryIndexServer. asp。现在分析一下该ASP页面的代码。 首先,包含文件 Connection. asp: 这包含了对ADO类型库的引用,这样就可以使用ADO常数了。 接下来,定义一些CSS样式。这些不是必须的,但这样可以比较容易地格式化输出结果 The Indexing Service YLE TYPE=t BODY ifont-family: Tahoma, Arial, sans-serif; font-size: 1opt) heading ( font-Eamily: Tahoma, Arial, sans-serif: font-size: 14pt; font-weight: bold) cite (font-family: Tahoma, Arial, sans-serif; font-size: 8pt) document (font-size: 10pt: font-weight: bold background-color: lightgrey; width: 10081 现在是真正的ASP代码。我们创建 Recordset对象,并设置连接字符串。稍后,我们将解 释确切的连接字符串 m strsearch Set reSearch Server Createobject(" ADODB. Recordset) Create the connection string strconn =Provider=MSIDXS: Data Source=Web 接下来构造查询字符串,它是SQL语言的扩展集。在后面我们也会详细介绍 instruct the search string strSearch ."SELEcT DocTitle, Path, FileName, Characterization, Size& WHERE CONTAINs ('. Request Form('txtsearchFor)&.') 下一步打开 Recordset对象,遍历记录,并显示结果。 Open the recordset on the search reSearch. Open strSearch, strconn
相应的H T M L脚本相当简单: 以上代码提供一个文本框,可以在其中输入搜索条件。按下 Perform Search按钮将调用 A S P页面Q u e r y I n d e x S e r v e r. a s p。现在分析一下该A S P页面的代码。 首先,包含文件C o n n e c t i o n . a s p: 这包含了对A D O类型库的引用,这样就可以使用 A D O常数了。 接下来,定义一些C S S样式。这些不是必须的,但这样可以比较容易地格式化输出结果。 现在是真正的A S P代码。我们创建 R e c o r d s e t对象,并设置连接字符串。稍后,我们将解 释确切的连接字符串。 接下来构造查询字符串,它是 S Q L语言的扩展集。在后面我们也会详细介绍。 下一步打开R e c o r d s e t对象,遍历记录,并显示结果。 第1 2章 通用数据访问计计379 下载
380 ASP3高级编程 Chinaopub.com 下载 ed for CLASS=" document'>’& reSearch("DocTitle')&"& reSearch("Characterization)&',& h("path’) reSearch('FileName')& (·& rs Search("size°) & bytes) reSearch. MoveNext Set reSearch Nothing 在我的计算机里,查找“ado”给出了如图12-3所示的结果(读者可能会得到与此不同的结 果,这取决于被索引的目录,以及在那些目录中所包含的文档)。 Results of search for ado Services reference nformaton ryno htm(4781 bytes) Explans how t use variables and constants n the ASP scr pting enironment Includes VBScr pt and wava htm(12507 bytes) Building ASP Pages Avigation page wI你 Ins to topcs wh式由 be the fundamental of scripting and Active Server tasly.htm(6189 bytes) Eaplans the ASP script commands t use to set the scope of objects, and gives recommendations.Abs ading model to use for partcular situations. thwaobu.htm (11244 bytes) 图12-3查找“ado”的结果 让我们来分析一下两段重要的代码:连接和查询。 3.用ADO连接到 Indexing service 与我们所见的其他ADO连接字符串一样,用于 Indexing service的连接字符串指定了OLE DB提供者的名称和数据的来源。 strConn ="Provider=MSIDXS: Data Source=web' Data source是要搜索的 Indexing Service目录的名称。可以在 Computer Management Console(在资源管理器中用鼠标右键单击 My Computer,选择 Management菜单项)中找到目录 名,如图12-4所示。 4.用于 Indexing Service的搜索字符串 搜索字符串类似于一个标准的SQL查询,但有特殊的关键字。这个概念与数据库中的搜 索概念一致,首先选择需要看到的项目,然后指定数据从哪里来,接着加入一些条件来限制 输出结果 我们先快速看一下这个査询,然后再详细讲解它的语法
在我的计算机里,查找“ a d o”给出了如图1 2 - 3所示的结果(读者可能会得到与此不同的结 果,这取决于被索引的目录,以及在那些目录中所包含的文档 )。 图12-3 查找“a d o”的结果 让我们来分析一下两段重要的代码:连接和查询。 3. 用A D O连接到Indexing Service 与我们所见的其他A D O连接字符串一样,用于 Indexing Service的连接字符串指定了 O L E D B提供者的名称和数据的来源。 Data Source是要搜索的 Indexing Service目录的名称。可以在 Computer Management C o n s o l e (在资源管理器中用鼠标右键单击 My Computer,选择M a n a g e m e n t菜单项)中找到目录 名,如图1 2 - 4所示。 4. 用于Indexing Service的搜索字符串 搜索字符串类似于一个标准的 S Q L查询,但有特殊的关键字。这个概念与数据库中的搜 索概念一致,首先选择需要看到的项目,然后指定数据从哪里来,接着加入一些条件来限制 输出结果。 我们先快速看一下这个查询,然后再详细讲解它的语法。 380计计ASP 3 高级编程 下载
shinapub.com 第2章通用数据访问381 下载 D:lSystem volume Information Services and Applcations 类别名称显示在 WMI Control Indexing services 图124 Computer Management Console窗口 在 SELECT语句中出现的字段确定选取目录的哪些属性 strSearch .'SELECT DocTitle, Path, FileName, Characterization, size& 接下来是FROM子句,它表明数据来自哪里。在本例中 SCOPE没有任何参数,所以搜索 的范围没有限制,因此会检查所有的目录条目(在下面的“FROM子句”小节对此做了详细的 说明): FROM SCOPE()·s 最后需要说明查找的内容,用 CONTAINS来查找包含特定字符串的文档 WHERE CONTAINS ('. Request, Form('txtsearchFor)&.' 5.字段名与属性 如果你对 Indexing service不熟悉,那么可能不知道哪些字段是可用的,实际上这个问题 很容易解决,因为它们都列在 Indexing Service管理工具中,如图12-5所示 Catalog DoccharCard 图12-5 Indexing service的管理工具 可以使用友好名或属性名作为字段名。 注意,此项技术仅应用于 Indexing Service提供者,并不适用于其他 OLE DB提供 下面我们来看一下 Indexing Service SQL与标准SQL的区别 6. SELECT子句 ELECT子句只用来从可用的属性名列表中选取字段名
图12-4 Computer Management Console窗口 在S E L E C T语句中出现的字段确定选取目录的哪些属性: 接下来是F R O M子句,它表明数据来自哪里。在本例中 S C O P E没有任何参数,所以搜索 的范围没有限制,因此会检查所有的目录条目 (在下面的“F R O M子句”小节对此做了详细的 说明): 最后需要说明查找的内容,用 C O N TA I N S来查找包含特定字符串的文档: 5. 字段名与属性 如果你对Indexing Service不熟悉,那么可能不知道哪些字段是可用的,实际上这个问题 很容易解决,因为它们都列在 Indexing Service管理工具中,如图1 2 - 5所示。 图12-5 Indexing Service的管理工具 可以使用友好名或属性名作为字段名。 注意,此项技术仅应用于Indexing Service提供者,并不适用于其他OLE DB提供 者。 下面我们来看一下Indexing Service SQL与标准S Q L的区别。 6. SELECT子句 S E L E C T子句只用来从可用的属性名列表中选取字段名。 第1 2章 通用数据访问计计381 下载 类别名称显示在 Indexing Services 下面
382 ASP3高级编程 Sinapyl co M 下载 可能你会倾向于使用 SELECT*而不是分别指定单个列名。然而,如果在查询目 录时这样做的话, OLE DB提供者就会提示出错。*号选取仅对 Indexing service目录 的视图有效 7.FROM子句 From子句允许选择目录中的信息来源,这与一些标准SQL的FROM子句有一点区别。有 三种不同的使用FROM子句的方法 使用预定义视图 使用定制视图 使用一个范围 (1)预定义视图 选择列的第一种方法是使用一个预定义视图名,这个视图只是一些字段的别名。例如 FROM FILEINFO_ ABSTRACT 表12-1为预定义视图的列表 表12-1预定义视图的列表 预定义视图 字段/属性 FILEINFO path, FileName, size, write, attrib FILEINFO ABSTRACT path, FileName, size, write, attrib, Characterization EXTENDED FILEINFO path, File Name, size, write, attrib, Doc Title, Doc Author, DocSubject, DocKeywords, Characterization WEBINFO Vpath, path, FileName, size, write, attrib, Characterization, Doc Title EXTENDED WEBINFO V path, path, File Name, size, Characterization, write, DocAthor DocSubject, DocKeywords, DocTitle URL. DocTitle Rank size. write SSEXTENDED WEBINFO URL, DocTitle, Rank, Hitcount, Doc Author, Characterization, size, write 预定义视图确实是一个捷径,它允许从预定义的列集中选择所有的列。同样,也可以选 择列名而不使用整个视图。 (2)定制视图 第二种方法是使用定制视图,它与预定义视图采用相同的格式 FROM My ViewName 在这里我们不打算讨论怎样创建定制视图,详细内容请参考 Indexing service文 (3)使用一个范围 第三种方法是在搜索中包含搜索的范围。范围真正指出了要搜索的目录,以及搜索的目 录深度。范围最简单的一种形式是空范围,即: FROM SCOPE( 这表明搜索首先从根目录开始,它下面的所有目录都要被搜索。如果要限制搜索的目录, 那么可以加上相应的路径
可能你会倾向于使用SELECT * 而不是分别指定单个列名。然而,如果在查询目 录时这样做的话,OLE DB提供者就会提示出错。 *号选取仅对Indexing Service目录 的视图有效。 7. FROM子句 F r o m子句允许选择目录中的信息来源,这与一些标准 S Q L的F R O M子句有一点区别。有 三种不同的使用F R O M子句的方法: • 使用预定义视图。 • 使用定制视图。 • 使用一个范围。 (1) 预定义视图 选择列的第一种方法是使用一个预定义视图名,这个视图只是一些字段的别名。例如: 表1 2 - 1为预定义视图的列表。 表12-1 预定义视图的列表 预定义视图 字段/属性 F I L E I N F O path,FileName, size, write, attrib F I L E I N F O _ A B S T R A C T path,FileName, size, write, attrib,Characterization E X T E N D E D _ F I L E I N F O path, FileName, size, write, attrib, DocTitle, DocAuthor, DocSub j e c t , D o c K e y w o r d s , C h a r a c t e r i z a t i o n W E B I N F O Vpath, path, FileName, size, write, attrib,Characterization, DocTi t l e E X T E N D E D _ W E B I N F O Vpath, path, FileName, size, Characterization, write, D o c A t h o r, DocSubject, DocKeywords, DocTi t l e S S W E B I N F O URL, DocTitle, Rank, size, write S S E X T E N D E D _ W E B I N F O URL, DocTitle, Rank, Hitcount, DocAuthor, Characterization, size, write 预定义视图确实是一个捷径,它允许从预定义的列集中选择所有的列。同样,也可以选 择列名而不使用整个视图。 (2) 定制视图 第二种方法是使用定制视图,它与预定义视图采用相同的格式: 在这里我们不打算讨论怎样创建定制视图,详细内容请参考 Indexing Service文 档。 (3) 使用一个范围 第三种方法是在搜索中包含搜索的范围。范围真正指出了要搜索的目录,以及搜索的目 录深度。范围最简单的一种形式是空范围,即: 这表明搜索首先从根目录开始,它下面的所有目录都要被搜索。如果要限制搜索的目录, 那么可以加上相应的路径。 382计计ASP 3 高级编程 下载
第2章通用数据访问383 FROM SCOPE ('D: \users \davids') 这只返回选择的目录以及其下面的子目录中的条目。如果只需要搜索选择的目录而不搜 索子目录,那么可以加入移动类型 FROM SCOPE('SHALLOW TRAVERSAL OF " D: \users\davids".) 移动类型包括 SHALLOW TRAVERSAL OF:表明只搜索指定的路径 DEEP TRAVERSAL OF:表明搜索指定的路径及所有的子目录 也可指定多个搜索范围 FROM SCOPE('SHALLOW TRAVERSAL OF ' D: \users\davids.", DEEP TRAVERSAL OF ' D: \users\janine) 如果没有指定搜索的深度,那么 DEEP TRAVERSAL是缺省值。同时,可不受物理路径的 限制,即,也可以使用虚拟路径。比如: FROM SCOPE('DEEP TRAVERSAL OF ./ProASP') 以上代码使用虚拟目录 ProASP作为搜索的根目录 8 WHERE子句 j标准的 WHERE子句比较,这里的 WHERE子句有一个配合搜索的谓词列表。 他们是 ARRAY:使用逻辑操作符比较两个数组。这对那些基于数组的字段十分有用,比如 个文件的 attribute属性 CONTAINS:允许匹配单词和短语。例如,下面这行代码能够匹配包括“ADO”或 RDS”的文档 WHERE CONTAINS("ADo·OR"RDs”) 下面的例子匹配“ADO”在“RDS”附近50个单词内的文档 WHERE CONTAINS("ADO. NEAR RDS 下面的例子匹配含有“ drink”、“ drinking”、“ drunk”等的文档: WHERE CONTAINS(FORMSOF(INFLECTIONAL, "drink.) FREETEXT:指定单词或短语的最佳匹配搜索,例如: WHERE FREETEXT(programming ADO LIKE:使用通配符执行匹配,例如 WHERE DOCAuthor LIKE Al% MATCHES:使用正规的表达式执行匹配,例如 WHERE MATCHES (DocAuthor, .[a-e]*') 搜索 Doc Author的第一个字符为a到e之间的任一字符的所有条目 NULL:允许匹配空值。例如: WHERE DOCAuthor IS NULL WHERE DocAuthor Is Not NULL 所有这些选择方法使得搜索目录变得更为容易。 详细的信息请参考 Indexing service文档 1222活动目录 对 Windows2000说,活动目录( Active Directory,AD)的 OLE DB提供者并不是什么新
这只返回选择的目录以及其下面的子目录中的条目。如果只需要搜索选择的目录而不搜 索子目录,那么可以加入移动类型。 移动类型包括: • SHALLOW TRAVERSAL OF:表明只搜索指定的路径。 • DEEP TRAVERSAL OF:表明搜索指定的路径及所有的子目录。 也可指定多个搜索范围: 如果没有指定搜索的深度,那么 DEEP TRAV E R S A L是缺省值。同时,可不受物理路径的 限制,即,也可以使用虚拟路径。比如: 以上代码使用虚拟目录P r o A S P作为搜索的根目录。 8. WHERE子句 与标准的W H E R E子句比较,这里的W H E R E子句有一个配合搜索的谓词列表。 他们是: • A R R AY:使用逻辑操作符比较两个数组。这对那些基于数组的字段十分有用,比如一 个文件的a t t r i b u t e属性。 • C O N TA I N S:允许匹配单词和短语。例如,下面这行代码能够匹配包括“ A D O”或 “R D S”的文档: 下面的例子匹配“A D O”在“R D S”附近 5 0个单词内的文档: 下面的例子匹配含有“d r i n k”、“d r i n k i n g”、“d r u n k”等的文档: • FREETEXT:指定单词或短语的最佳匹配搜索,例如: • LIKE:使用通配符执行匹配,例如: • MAT C H E S:使用正规的表达式执行匹配,例如: 搜索D o c A u t h o r的第一个字符为a到e之间的任一字符的所有条目。 • NULL:允许匹配空值。例如: 所有这些选择方法使得搜索目录变得更为容易。 详细的信息请参考Indexing Service文档。 12.2.2 活动目录 对Windows 2000来说,活动目录(Active Directory,A D )的OLE DB提供者并不是什么新 第1 2章 通用数据访问计计383 下载
384Asp;高箱程 Chinapub.com 下载 东西,但只有在 Windows2000中AD才被完全实现。你可能对活动目录服务接口( Active Directory services Interface,ADSI)这个术语更加熟悉。ADSI是AD的编程接口 对ADSI我们不加详述,因为在第21章已经覆盖了这部分内容。在这里我们只想 简单介绍一下ADSI与ADO是如何相互作用的。 AD是 Windows2000的目录服务,它管理一个或多个机器的资源。这实际上意味着对于所 有的资源信息只有一个源,并且AD的 OLE DB提供者让你能够运用现有的知识来访问这个资 源信息 使用这个 OLE DB提供者相当简单,只要有一点AD的知识。大多数例子显示了一种相当 怪异的访问目录信息的语法,就像下面的例子一样: i((objectclass=user)); adspath: subtree 上面这行代码列出了所有的本地用户,但很不直观。幸运的是,我们还可以使用SQL样 式的语法: SELECT ADsPath, cn FROM 'LDAP: //localhost WHERe objectcategory='user 这行代码输出的结果与上面的相同,但对那些不太了解目录查询语言的人来说更易于理解。 目录查询语言在AD文档中有介绍 1.路径 需要用路径来唯一地确定一个ADSI对象。路径的第一部分确定了目录服务提供者。例如: LDAP:代表轻量目录访问协议 Lightweight Directory Access Protocol WINNT:代表 WindOws nt。 NDS:代表 Net Ware目录服务( Net Ware Directory Services) NWCOMPAT:代表 Netware兼容 路径的第二部分确定了名称空间,它因目录服务提供者的不同而不同。下面是一些完整 的例子。 LDAP: //localhost LDAP://webdev wrox co uk/CN- WebDev, DC=Wrox, DC=CO, DC=uk winNT: //HUNDREDACRE/Tigger, Tigger winNT://HUNDREDACRE/Davids NDS://WebDev /O=WroxOU=Editorial/CN.Davids NWCOMPAT://Netware1/HPLaserJet 关于目录服务的特殊语法的详细内容请参考相应的文档。 2.使用针对ADS的 OLE DB提供者 ADS的 OLE DB提供者由 Windows2000自动完成安装,所以使用它时不需做什么其他工作。 尽管路径与査询字符串很复杂,但从目录中访问各项目却很容易。接下来我们来看一个 允许用户选择一个目录中的用户、组或所有对象的例子。 首先创建 ActiveDirectory. html文件,它提供选择功能 FORM NAME-frmcategory AcTION='ActiveDirectory. asp. METHOD:'POST'> SELECT NAME="lstcategory'>
东西,但只有在 Windows 2000 中A D才被完全实现。你可能对活动目录服务接口 ( A c t i v e Directory services Interface,A D S I )这个术语更加熟悉。A D S I是A D的编程接口。 对A D S I我们不加详述,因为在第 2 1章已经覆盖了这部分内容。在这里我们只想 简单介绍一下A D S I与A D O是如何相互作用的。 A D是Windows 2000的目录服务,它管理一个或多个机器的资源。这实际上意味着对于所 有的资源信息只有一个源,并且 A D的OLE DB提供者让你能够运用现有的知识来访问这个资 源信息。 使用这个OLE DB提供者相当简单,只要有一点 A D的知识。大多数例子显示了一种相当 怪异的访问目录信息的语法,就像下面的例子一样: 上面这行代码列出了所有的本地用户,但很不直观。幸运的是,我们还可以使用 S Q L样 式的语法: 这行代码输出的结果与上面的相同,但对那些不太了解目录查询语言的人来说更易于理解。 目录查询语言在A D文档中有介绍。 1. 路径 需要用路径来唯一地确定一个A D S I对象。路径的第一部分确定了目录服务提供者。例如: • LDAP:代表轻量目录访问协议(Lightweight Directory Access Protocol)。 • WINNT:代表Windows NT。 • NDS:代表N e t Wa r e目录服务( N e t Ware Directory Services)。 • NWCOMPAT:代表N e t w a r e兼容 路径的第二部分确定了名称空间,它因目录服务提供者的不同而不同。下面是一些完整 的例子。 关于目录服务的特殊语法的详细内容请参考相应的文档。 2. 使用针对A D S的OLE DB提供者 A D S的OLE DB提供者由Windows 2000自动完成安装,所以使用它时不需做什么其他工作。 尽管路径与查询字符串很复杂,但从目录中访问各项目却很容易。接下来我们来看一个 允许用户选择一个目录中的用户、组或所有对象的例子。 首先创建A c t i v e D i r e c t o r y. h t m l文件,它提供选择功能: 384计计ASP 3 高级编程 下载