在使用 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 server2000 实例的名称(可选)。在"数据库"框中,输入 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 中指定查询时不一定是这样。例如:
select+*+from+customers+for+xm'>http://iisserver/nwind?template=<root+xmlns:sql="urn:schemas-microsoft-com:xml-sql"><sql:query>select+*+from+customers+for+xm
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 附带的文档提供了开发应用程序时应考虑的安全事项的信息。
新闻热点
疑难解答