** 将 SQLXML 3.0 用起来 ( Web Services, XML Views, Managed Classes ) ** ****
小气的神
2002-5-25
Article Type: Overview
难度等级: 5/9
版本: 4.16
使用 SQLXML Managed Classes
SQLXML 提供的 Managed Classes 并不多, dotNET Framework 提供了 MS SQL 2000 的 Data Provider ,这意味着你可以使用 ADO.NET 的 Class 来执行 FOR XML 子句的查询,但是你将不能用这些 Class 执行我们上面说的模板和服务器端的 XPath 命令。所以 SQLXML 提供的 Managed Classes 也是着重在这些方面的,可喜的是这些 Classes 和 ADO.NET 中的对象能很好的配合工作,比如 Dataset.
从下面这幅图中我们可以看到 SQLXML Managed Classes 的对象模型:
通过这些 Managed Classes 和原来 dotNET Framework 的 Classes ,我们可以通过更多的方式存取数据库。而且我们看到信息流动的形式可以是多种的,出于对性能的考虑,开发人员将根据具体的情况选择不同的方式 ( 详见 SQLXML3.0 文档: Architecture of Client-Side and Server-Side XML Formatting)
不过从某种程度上它可能改变我们原来的架构的体系结构, SQLXML 3.0 带的一些例子婉转地说明了这一点,而且也想证明对于有的应用来说, SQLXML 可以很好的处理一些情况,并且发挥 XML 的强大优势。
DAL 的概念是如此的流行,而我也从 Project Track System 的代码中抽出 DB 存取的一些代码,组成一个 DAL 组件,然后我试图对一个简单的假设测试一下,那就是先定义一个模板 (XML view) ,然后用 DAL 执行这个模板,从中取出数据,最后用一个简单的 XSLT 将它显示出来。
模板就用我们上述中的任意一个显示 Employees 表的模板,而后我们把执行模板的结果显示在一个 Grid 中,并且将同样的结果通过 XSLT 做一个 HTML Table 的显示。
这张图的结果使用两种不同的方式, ASP.NET Grid 中的数据是这样显示出来的,首先我们加一个新的 Item: 一个 Dataset ,然后我们 Copy 上面用 VS.NET 产生的那个 Schemas 文件的内容,可以说两者是一样的,之后我们根据这个 Dataset 就可以生产一个 C# 的类,接着我们拖动这个 Dataset 到 WebForm 的设计视图,就会一个 Wizard 出现,选中这个 Dataset 。然后我们再拖入一个 ASP.NET 的 DataGrid 控件,设置它的 DataSource 是这个 Dataset 。然后在 Page_Load 加入下面的代码:
private void Page_Load( object sender, System.EventArgs e)
{
// Put user code to initialize the page here
employees1.ReadXml( new XmlTextReader( "http://localhost/northwind/templates/emplyeesvs.xml" ) );
dgEmployees.DataBind() ;
}
这样我们完成了 DataGrid 中的显示 ( 显然这种方法没有使用新的 Class ,只用了 dotNET Framework) 。至于在 Grid 下面的 HTML Table 显示是通过执行 DAL 和一个 XSLT 获得的。大致的代码如下:
public void WriteTable()
{
string RetXMLString ;
XSLTHelp xslHelp = new XSLTHelp() ;
SqlXmlDal = new SQLXML() ;
RetXMLString = SqlXmlDal.ExecuteTemplteFile( "selectemployees.xml" ) ;
RetXSLString = xslHelp.ApplyXSL( RetXMLString , Server.MapPath("Employees.xslt" )) ;
Response.Write ( RetXSLString ) ;
}
最后一段代码是使用 XPath 访问映射文件的,我经常使用类似下面这段代码来测试自己的映射文件和 XPath 表达式。
SqlXmlCmdObj = new SqlXmlCommand( SQLDBConnStr ) ;
SqlXmlCmdObj.CommandType = SqlXmlCommandType.XPath ;
SqlXmlCmdObj.CommandText = "Employees" ;
SqlXmlCmdObj.SchemaPath = SchemasDir + "EmployeesVS.xsd";
ResultStream = SqlXmlCmdObj.ExecuteStream() ;
StreamReader SR = new StreamReader( ResultStream ) ;
ResultString = SR.ReadToEnd() ;
Console.WriteLine(ResultString);
好了,我想这个简单的例子之后也结束我们的旅途,至此我们大致的考察了一些 SQLXML3.0 中的一些新特性,虽然只开了一个头,我们已经发现里面藏着很多很多的内容和概念(全部详细讲完可能可以够写一本书了 haha ),当然我们只考察了非常有趣而且容易上手的几个功能,其中有许多我们还没有真正深入涉及到,但在描述的过程中我已经开始不停地假设,假定你以前有使用过 SQL 2000 XML 功能,假定你对 XDR 、 XPath 、 XSLT 有一个大致的认识和印象。最后我不得不提高了这篇文章的难度等级,我想这是我的问题,事隔一二个月之后,几乎是边回忆边写边调试这些例子和程序,所以一定会疏漏掉一些,使得文章更加难读。不过我相信 SQLXML 中有足够的特色可以让你对它印象深刻,尽管比起我喜欢的 Hailstorm 模型, SQXML 还会逊色和欠缺一些,但从 Microsoft 对 SQL Server 的着力和期望来看, SQL Server 2000 和它的下一个版本都会承担和展现更多的功能和特色,无论 XML 还是数据存储本身, SQL Server 都将不是一个简单的产品,而会象一个开发平台的方向迈进,借助 XML ,你会发现它能够更加紧密的和 Microsoft 的其它产品融合在一起,并且轻易地体现其重要的核心角色。
( 之后的文章,我们可能会考察有关 SQLXML 更细节的一些特性亦或是最新的 Microsoft SQL Server Notification Services 的一些内容,我想它们都将是十分具体的 SQLXML 的应用和深入 )
相关文件下载: ** SQLXML.zip ( 51K ) **
_ _
_
_
_ 特别说明: _
本文原创, CSDN 署名首发,所有文字和图片版权所有。未经授权请勿传播、转载或改编。
如果有问题或建议, 请发电子邮件给 [email protected]