使用用于 SQL Server 的 IIS 虚拟目录管理实用工具
在使用 HTTP 访问 Microsoft? SQL Server? 2000 数据库之前,必须安装适当的虚拟目录。在运行 Microsoft Internet 信息服务 (IIS) 的
计算机上,使用用于 SQL Server 的 IIS 虚拟目录管理实用工具(在"SQL Server 工具"程序组中单击"在 IIS 中配置 SQL XML 支持")定义
并注册新的虚拟目录,即所谓的虚拟根。该实用工具指示 IIS 在新的虚拟目录和 Microsoft SQL Server 实例之间创建关联。有关该实用工具
用户界面的信息,请参见 IIS 虚拟目录管理实用工具。
必须将 IIS 服务器和虚拟目录的名称指定为 URL 的一部分。虚拟目录(包括登录、密码和访问权限)中的信息用于建立与特定数据库的连接
并执行查询。
可以指定 URL:
直接访问数据库对象,例如表。
在这种情况下,URL 将包括 dbobject 类型的虚拟名称。
执行模板文件。
模板是由一个或多个 SQL 语句组成的有效的 XML 文档。在 URL 中指定模板文件时,将执行存储在模板文件中的 SQL 命令。可以直接在 URL
中指定 SQL 查询,但考虑到安全性,不建议这样做。
执行 XPath 查询。
对指定作为 URL 一部分的带批注的映射架构文件执行 XPath 查询。
虚拟名
若要使模板文件、映射架构文件或数据库对象(如表或视图)成为 URL 的一部分,必须创建 template、schema 和 dbobject 类型的虚拟名称
。将虚拟名称指定为 URL 的一部分,以便执行模板文件、对映射架构文件执行 XPath 查询或直接访问数据库。
在 URL 中指定的虚拟名称类型(template、schema、dbobject)还用于决定在 URL 中指定的文件类型(模板文件或映射架构文件)。例如,
下面的 URL 使用模板访问 SQL Server 数据库:
http://IISServer/nwind/TemplateVirtualName/Template.xml
TemplateVirtualName 是 template 类型的虚拟名称,用于标识指定的文件 (Template.xml) 是模板文件。
创建 nwind 虚拟目录
新增信息 - SQL Server 2000 SP3。
下例创建 nwind 虚拟目录。在大多数用于说明 Microsoft? SQL Server? 2000 的 URL 访问的示例中,都使用 nwind 虚拟目录。
在创建 nwind 虚拟目录之前,需要一个与将要创建的虚拟目录相关联的物理目录(例如,C:\Inetpub\Wwwroot\nwind,此处 nwind 是与将要
在以下过程中创建的 nwind 虚拟目录相关联的物理目录)。
还需要在与该虚拟目录相关联的物理目录下创建两个子目录(例如,C:\Inetpub\Wwwroot\nwind\template 和
C:\Inetpub\Wwwroot\nwind\schema)。这些是与 template 和 schema 类型的虚拟名称相关联的目录,这两种类型的目录是作为创建 nwind
虚拟目录的一部分而创建的。
创建 nwind 虚拟目录
在 Microsoft SQL Server 程序组中,单击"在 IIS 中配置 SQL XML 支持"。
展开服务器,然后单击想要的 Web 站点。
在"操作"菜单上指向"新建"子菜单,然后单击"虚拟目录"命令。新虚拟目录的属性页将显示在屏幕上。
在"新的虚拟目录属性"对话框的"常规"选项卡上,输入虚拟目录的名称。对于本例,键入 nwind 和物理目录路径(例如
C:\Inetpub\Wwwroot\nwind,假设在 C:\Inetpub\Wwwroot 目录中已创建了 nwind 子目录)。或者可以使用"浏览"按钮选择目录。
在"安全"选项卡上,选择"SQL Server"和"使用 Windows 集成身份验证"。
在"数据源"选项卡上,在"SQL Server"框中输入服务器的名称,例如 (local);如果在指定的计算机上安装了多个实例,则输入 SQL Server
2000 实例的名称(可选)。在"数据库"框中,输入 Northwind 作为默认数据库的名称。
在"设置"选项卡上,选择"允许 URL 查询"、"允许模板查询"、"允许 XPath"和"允许 POST"选项。
在"虚拟名称"选项卡上,单击"新建"按钮以创建模板类型的虚拟名称。
在"虚拟名称配置"对话框中:
在"虚拟名称"框内输入
template(可以是用户指定的任意名称)。在"类型"列表中,选择"模板"。输入路径(例如,C:\Inetpub\Wwwroot\nwind\template,假设与虚
拟目录相关联的物理目录下有一个子目录 template,但并不检查该目录是否存在)。单击"保存"按钮保存虚拟名称。
在"虚拟名称"选项卡上,单击"新建"按钮以创建架构类型的虚拟名称。
在"虚拟名称"框内输入
schema(可以是用户指定的任意名称)。在"类型"列表中,选择"架构"。输入路径(例如,C:\Inetpub\Wwwroot\nwind\schema,假设与虚拟目
录相关联的物理目录下有一个子目录 schema)。单击"保存"按钮保存虚拟名称。
在"虚拟名称"选项卡上,单击"新建"按钮以创建模板和架构类型的虚拟名称。
在"虚拟名称"框内输入 dbobject(可以是用户指定的任意名称)。在"类型"列表中,选择 dbobject。单击"保存"按钮保存虚拟名称。
单击"确定"按钮保存设置。
这就创建了虚拟目录 nwind。默认情况下,使用该虚拟目录对 Northwind 数据库执行指定的查询。
若要测试虚拟目录,请在浏览器中键入:/nwind?sql=SELECT"http://<IISServer>/nwind?sql=SELECT * FROM Employees FOR XML AUTO&root=root 并按 ENTER 键
。
使用 HTTP 访问 SQL Server
新增信息 - SQL Server 2000 SP3。
可以使用 HTTP 访问 Microsoft? SQL Server? 2000。有关 SQL ISAPI 扩展所支持的 URL 语法的更多信息,请参见 URL Access。在可以使用
HTTP 指定查询前,必须先用用于 SQL Server 的 IIS 虚拟目录管理实用工具创建一个虚拟根。有关更多信息,请参见创建 nwind 虚拟目录。
SQL Server 的 HTTP 访问能力使您得以:
直接在 URL 中指定 SQL 查询,例如:
http://IISServer/nwind?sql=SELECT+*+FROM+Customers+FOR+XML+AUTO&root=root
指定 FOR XML 子句以 XML 文档而不是标准行集的形式返回结果。根参数可标识单一的顶层元素。
直接在 URL 中指定模板。
模板是包含一个或多个 SQL 语句的有效的 XML 文档。模板使您得以将数据放在一起以形成有效的 XML 文档,但直接在 URL 中指定查询时不
一定是这样。例如:
L+AUTO</sql:query></ROOT>
在 URL 中指定模板文件。
在 URL 中写入长 SQL 查询会很麻烦。此外,浏览器对在 URL 中可以输入的文本量可能有限制。若要避免这些问题,可以编写模板并将其存储
在文件中。模板是包含一个或多个 SQL 语句和 XPath 查询的有效的 XML 文档。可以在 URL 中直接指定模板文件,例如:
http://IISServer/nwind/TemplateVirtualName/templatefile.xml
在 URL 中,TemplateVirtualName 是使用用于 SQL Server 的 IIS 虚拟目录管理实用工具创建的 template 类型的虚拟名称。
模板文件还删除来自用户的数据库查询的详细信息以增强安全性。通过将模板文件存储在注册数据库时所在的虚拟根目录(或其子目录)中,
删除虚拟根上的 URL 查询处理服务并只允许 SQL Server XML ISAPI 处理文件及返回结果集,从而加强了安全性。
指定在带批注的 XML 数据简化 (XDR) 架构(也称为映射架构)上执行的 XPath 查询。
从概念上讲,对映射架构编写 XPath 查询与使用 CREATE VIEW 语句创建视图并对视图编写 SQL 查询相似,例如:
http://IISServer/nwind/SchemaVirtualName/schemafile.xml/Customer[@CustomerID="ALFKI"]
在这个 URL 中:
SchemaVirtualName 是使用用于 SQL Server 的 IIS 虚拟目录管理实用工具创建的 schema 类型的虚拟名称。
Customer[@CustomerID="ALFKI"] 是在该 URL 中指定的 schemafile.xml 上执行的 Xpath 查询。
直接在 URL 中指定数据库对象。
可以将数据库对象(如表和视图)指定为 URL 的一部分,并对数据库对象指定 Xpath 查询,例如:
http://IISServer/nwind/dbobjectVirtualName/XpathQuery
在这个 URL 中,dbobjectVirtualName 是使用用于 SQL Server 的 IIS 虚拟目录管理实用工具创建的 dbobject 类型的虚拟名称。
说明 当在 URL 中执行需要资源(如内存)的操作(创建临时表和临时存储过程、声明游标、执行sp_xml_preparedocument 等等)时,必须
执行适当的相应命令(如 DROP TABLE、DROP PROCEDURE、DEALLOCATE 游标或 EXECUTE sp_xml_removedocument)以释放资源。
XML 文档和文档片段
当用 root 参数执行模板或查询时,结果是有单个顶层元素的完整 XML 文档。例如,下列 URL 执行模板:
http://IISServer/VirtualRoot/TemplateVirutalName/MyTemplate.xml
下面是一个示例模板文件 (MyTemplate.xml):
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:query>
SELECT *
FROM Customers
FOR XML AUTO
</sql:query>
</ROOT>
模板中的 <ROOT> 标记为结果 XML 文档提供了单个的顶层元素。
可以直接在 URL 中指定查询。在此例中,root 参数指定返回文档中的顶层元素:
http://IISServer/VirtualRoot?sql=SELECT * FROM Customers FOR XML AUTO&root=root
如果在写上述查询时不使用 root 参数,将返回一个 XML 文档片段(即缺少单个顶层元素的 XML 文档)。 该片段没有标题信息。例如,下列
URL 将返回文档片段:
http://IISServer/VirtualRoot?sql=SELECT * FROM Customers FOR XML AUTO
当请求一个 XML 文档时,将返回用以标识文档编码类型的字节顺序标记。字节顺序标记是用以标识 XML 文档编码类型的标准字节顺序。XML
分析器使用该字节顺序标记确定文档编码类型(如 Unicode)。例如,字节顺序标记"oxff, 0xfe"将文档标识为 Unicode。默认情况下,分析
器假设 UTF-8 为文档编码类型。
当请求 XML 片段时将不返回字节顺序标记,因为字节顺序标记属于 XML 文档标题,而 XML 片段中没有标题。
安全说明 Microsoft SQLXML Web 发行版增强了对此 XML 功能的支持。要使用最新的增强功能,请从 Microsoft Web 站点安装 Microsoft
SQLXML 3.0 Service Pack 1。此 Service Pack 附带的文档提供了开发应用程序时应考虑的安全事项的信息。