将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署名首发,所有文字和图片版权所有。未经授权请勿传播、转载或改编。
如果有问题或建议,请发电子邮件给new2001@msn.com