在IE 5.0+中绑定分级数据

ZDNet软件频道 时间:2003-11-12 作者:ZDNet China |  我要评论()
本文关键词:sqltips
本实例提供了一种从Microsoft SQL 2000中获取XML数据、然后把它添加到HTML中的数据岛、并在Internet Explorer(IE)5.0或者更高版本中把该数据绑定到HTML元素中去的方法。
本文译自Builder.com,未经许可请勿转载

本实例提供了一种从Microsoft SQL 2000中获取XML数据、然后把它添加到HTML中的数据岛、并在Internet Explorer(IE)5.0或者更高版本中把该数据绑定到HTML元素中去的方法。(我假设你已经有了XML、HTML、SQL 2000、ASP和ADO的基本知识。)

SQL 2000支持XML,这就向你提供了一种干净简单的查询数据并输出XML文本的方法。现在,我有一个表格以及一个视图,它们分别叫着tblCustomers和vwOrders。VwOrders按照CustomerID和ProductName来分组合计单价与数量的乘积(即Quantily*UnitPrice)。

我们计划根据CustomerID来识别消费者并提供他(她)的订货清单。(也可以修改为查询一组消费者的订货清单。)ASP页面将调用一个SQL存储过程,该过程将返回一个Stream对象并把XML数据添加到HTTP响应中去。然后,在客户端,IE将会把该数据绑定到合适的元素中去。这将生成两个HTML表格:一个表格用来存储Customer数据,另一个用来保存Order数据,该表格内嵌到消费者表格。我们首先需要创建存储过程(用来查询数据)并提供准确的XML。下面的SQL将完成这项任务:

CREATE PROCEDURE get_customer_orders (@customeridint) AS
SELECT tblCustomers.tblID, tblCustomers.CustomerName,
 tblCustomers.AddressLine1, tblCustomers.AddressLine2, tblCustomers.City,
 tblCustomers.State, tblCustomers.Zip, vwOrders.ProductName, vwOrders.SumSales
 FROM tblCustomers INNER JOIN vwOrders ON tblCustomers.tblID =
 vwOrders.CustomerID WHERE tblCustomers.tblID = @customerid FOR XML AUTO, ELEMENTS

查询应该返回一个可以用于XML数据岛的XML字符串。现在你需要检索数据并把它放到你的HTTP响应中去。你不必细究如何使用ADO,下面的HTML/VBScript将检索XML流(还有其它可以完成这一任务的方法,但这种方法应该最简单):

. . .
<xml id="xmlData">
<%
Dim conn, strm, cmd, prm
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "some,connection,string"
Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = conn
cmd.CommandString = "get_customer_orders" 'name of the stored procedure
cmd.CommandType = 4 'adCmdStoredProc
Set prm = cmd.CreateParameter("@customerid", 3, 1, 4, customerID)
cmd.Parameters.Appendprm
Set strm = cmd.Execute()
Response.Writestrm.ReadText(-1)
Set strm = Nothing
Set prm = Nothing
Set cmd = Nothing
conn.Close
Set conn = Nothing
%>
</xml>
. . .

在HTML中,你应该用dataSrc和dataFld属性来绑定TABLE和INPUT,如下所示:

. . .
<TABLE dataSrc="#xmlData">
<TR>
<TD><INPUT TYPE="text" dataFld="CustomerName"></TD>
</TR>
<TR>
<TD>
<TABLE dataSrc="#xmlData" dataFld="vwOrders">
<TR>
<TD><INPUT TYPE="text" dataFld="SumSales"></TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
. . .


本文作者Philip Perkins是Ajilon咨询公司的签约人,他知识非常广博——从机器控制和客户端服务器一直到企业内部网应用程序。




责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134