调用Web 服务的CustOrdersDetail 方法执行同名的存储过程。这个方法返回一个对象数组,那些物体本身可能是XmlElement 或者SqlMessage 类型。 这些类型在你的Web 服务相关的WSDL 文件里定义的。 XmlElement 类型的对象包括从执行存储过程,用户定义的函数或SQLXML服务器上模版的返回的结果。 SqlMessage 对象包括从SQLXML 服务器返回的任何错误信息。 你可以像下面所列的代码一样在对像数组中引用XmlElement类型:
(C# code)
result = (System.Xml.XmlElement) results[j];
txtResponse.Text = result.OuterXml.ToString();
(VB.Net code)
result = results(j)
txtResponse.Text = result.OuterXml.ToString()
这段代码检索对象数组中的基础元素并且把它强制转换成XmlElement 对象类型。然后,它展示了设置在Web表单上的XML结果,是通过把txtResponse控件上Text属性设置为 XmlElement对象的OuterXml属性的值。执行样本代码的时候,在txtOrderID文本框中输入参数10250(Northwind数据库内OrderID键对应的值。)。 . 当你点击按钮时,返回的XmlElement中就包含了下面的XML 数据:
<SqlXml>
<row ProductName="Jack's New England Clam Chowder"
UnitPrice="7.7"
Quantity="10" Discount="0"
ExtendedPrice="77" />
<row ProductName="Manjimup Dried Apples"
UnitPrice="42.4" Quantity="35" Discount="15"
ExtendedPrice="1261.4" />
<row
ProductName="Louisiana Fiery Hot Pepper Sauce"
UnitPrice="16.8" Quantity="15" Discount="15"
ExtendedPrice="214.2" />
</SqlXml>
注意在父标签<SqlXML>下的<row>元素包含属性ProductName, UnitPrice,Quantity, Discount和ExtendedPrice,与CustOrdersDetail存储过程的选定的和计算的字段之间对应。如果在使用命令行执行方式 CustOrdersDetail ' 10250 ' 在SQL 查询分析器应用程序中测试程序,你将看见那个那些数据,这些数据在XmlElement 里包含的数据所对应的结果集里。SQLXML 也能执行模板,让你使用XPath 查询来从一个基本的XML 结果集中检索数据。模板支持能够非常在开发一个有用的应用程序时提供很大的帮助,但是它不能提供有效提升XML 数据所需要的所有的灵活性。
SQLXML:简单但是有限
SQLXML 和完整的VS.Net Web 服务相比还是很有限的。例如,产生SQLXML的Web 服务不能应用一个XSLT样式表到XML数据或编程处理数据来直接输出HTML到你的客户端应用程序中。本质上,SQLXML方法要求你把你的事务层和数据层联系起来,以便有效的从你的客户端应用程序中封装程序逻辑。返回的数据结果可能是很难维护的并且不是非常容易移植到新的工具或者平台上。
不过,就像样本应用程序那样,你只需要遵循构造程序步骤大略的描述,写不到20行的代码行, 你就能调用Web 服务来返回XML 数据到你的客户端应用程序。 SQLXML是一个理想的解决方案,用来创建浏览在线的目录信息,销货定单历史,或者任何可以利用来检索远程原始XML数据的工具。这项技术将被证明是适合于那些主要事务为集中数据检索和操作的应用程序,而不是用于扩展业务应用程序规则和逻辑。因为返回的数据已经是XML 形式,所以你能使用XSLT排序,格式化提高你的数据的产量。
