Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > ADP及SQL SERVER

深入探讨SQL Server 2000对XML的支持(2)

时 间:2006-09-12 00:00:00
作 者:UMVsoft整理   ID:8  城市:上海  QQ:2851379730点击这里给张志发消息
摘 要:深入探讨SQL Server 2000对XML的支持(2) 
正 文:

 现在一个虚拟目录已经被映射到一个指定来保存 XML查询模板的文件夹,让我们创建一个有效的 XML模板,用来执行 SQL查询。下面的代码是一个模板示例。


  file2.xml

<Northwind xmlns:sql=
"urn:schemas-microsoft-com:xml-sql">
<sql:query>
SELECT Customers.CustomerID, Customers.ContactName,
Orders.OrderID, Orders.CustomerID
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID
FOR XML AUTO
</sql:query>
</Northwind>


  这段代码中使用了一个名为sql的前缀和一个URI urn:schemas-microsoft-com:xml-sql,这个前缀用来标识使用在 SQL Server XML ISAPI上的元素。有一个元素名为query,顾名思义它就是用来标记模板文件中的SQL 查询语句。好,让我们来演示一下如何使用这个模板吧!请在地址栏中输入,http://localhost/northwind/templates/file2.xml,当然你也可以根据你的需要改变相应的服务器名和虚拟目录名。

  让我们把这个 URL拆分成单独的片段,进行分析,你可以看见,我们先使用了 northwind虚拟根,然后使用templates虚拟目录名,如前我们说过,该虚拟目录名已经映射到templates的物理目录中。最后, URL给出了模板文件的名称。执行这个模板,浏览器就会把表中customers元素下嵌套的不同的订单以XML文档的形式显示出来。

  使用模板而不使用 URL查询有许多优点。首先,现在一个最终用户就没有改变SQL语句的权力了,去除“通过URL查询访问 SQL Server服务器”的选项 ,就只有SQL Server XML ISAPI可以用来处理模板文件,这就避免未经授权的 插入、更新和删除程序被执行。其次, XML模板支持动态加入参数,这就允许你不用更改模板文件就可以更改一个 SQL WHERE子句的值。

  使用参数,就像插入一个 XML header元素一样简单的,在 header元素中,定义了一个 param元素,使用一个值为CustomerID的名称属性。这个参数被赋予一个默认值"A",你可以象在一个存储过程中一样在模板文件中使用这个参数,只要在这个参数前添加一个@,然后把它放入SQL语句或用来调用一个存储过程就可以了。请见下面的代码。

<Northwind xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:header>
<sql:param name='CustomerID'>A</sql:param>
</sql:header>
<sql:query>
SELECT Customers.CustomerID, Customers.ContactName,
Orders.OrderID, Orders.CustomerID
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID
WHERE Customers.CustomerID LIKE @CustomerID + '%'
FOR XML AUTO
</sql:query>
</Northwind>

  在本例中,CustomerID参数被一个WHERE子句使用。如果把参数设为"B",SQL 语句就会从Customers和Orders表中返回所有的CustomerID以B开头的行。调用模板并传递正确的CustomerID参数值,只要在查询字符串之后加上参数名和参数值,如:http://localhost/northwind/templates/file2.xml?CustomerID=B即可,就这么简单。

  四、XPath查询 架构和模板

  XPath查询也可以被内嵌进一个XML模板文件中,下面的代码是一个包含XPath查询的简单的XML模板文件。

<Northwind xmlns:sql=
"urn:schemas-microsoft-com:
xml-sql">
<sql:xpath-query mapping-schema=
"file4.xdr">
/Customer[@CustomerID=
'ALFKI']/Order
</sql:xpath-query>
</Northwind>

  这个查询使用了一个架构(schema)返回CustomerID号为ALFKI的用户的所有的订单,如果想要使XPath语句运行,必须使用一个XDR架构文件映射不同的XML元素和属性到相应的数据库表和字段名。下面给出了这个架构文件。

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes"
xmlns:sql="urn:schemas-microsoft-com:xml-sql">

<ElementType name="Customer" sql:relation="Customers">
<AttributeType name="CustomerID" dt:type="id" />
<AttributeType name="CompanyName" />
<AttributeType name="ContactName" />
<AttributeType name="City" />
<AttributeType name="Fax" />
<AttributeType name="Orders" dt:type=
"idrefs" sql:id-prefix="Ord-" />

<attribute type="CustomerID" />
<attribute type="CompanyName" />
<attribute type="ContactName" />
<attribute type="City" />
<attribute type="Fax" />
<attribute type="Orders" sql:relation=
"Orders" sql:field="OrderID">
<sql:relationship
key-relation="Customers"
key="CustomerID"
foreign-relation="Orders"
foreign-key="CustomerID" />
</attribute>

<element type="Order">
<sql:relationship
key-relation="Custo

Access软件网QQ交流群 (群号:483923997)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助