380 ASP3高级编程 Chinaopub.com 下载 ed for CLASS=" document'>’& reSearch("DocTitle')&</SPAN><Br>"& reSearch("Characterization)&'<BR>,& h("path’) reSearch('FileName')&</A> (·& rs Search("size°) & bytes) reSearch. MoveNext Set reSearch Nothing </BODY> </HTML> 在我的计算机里,查找“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的知识。大多数例子显示了一种相当 怪异的访问目录信息的语法,就像下面的例子一样: <LDAP: //localhost>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 高级编程 下载