将SQLXML 3.0用起来( Web Services, XML Views, Managed Classes ) [4]

类别:.NET开发 点击:0 评论:0 推荐:

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 2000Data Provider,这意味着你可以使用ADO.NETClass来执行FOR XML子句的查询,但是你将不能用这些Class执行我们上面说的模板和服务器端的XPath命令。所以SQLXML提供的Managed Classes也是着重在这些方面的,可喜的是这些ClassesADO.NET中的对象能很好的配合工作,比如Dataset.

从下面这幅图中我们可以看到SQLXML Managed Classes的对象模型:

      

 

通过这些Managed Classes和原来dotNET FrameworkClasses,我们可以通过更多的方式存取数据库。而且我们看到信息流动的形式可以是多种的,出于对性能的考虑,开发人员将根据具体的情况选择不同的方式(详见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#的类,接着我们拖动这个DatasetWebForm的设计视图,就会一个Wizard出现,选中这个Dataset。然后我们再拖入一个ASP.NETDataGrid控件,设置它的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功能,假定你对XDRXPathXSLT有一个大致的认识和印象。最后我不得不提高了这篇文章的难度等级,我想这是我的问题,事隔一二个月之后,几乎是边回忆边写边调试这些例子和程序,所以一定会疏漏掉一些,使得文章更加难读。不过我相信SQLXML中有足够的特色可以让你对它印象深刻,尽管比起我喜欢的Hailstorm模型,SQXML还会逊色和欠缺一些,但从MicrosoftSQL Server的着力和期望来看,SQL Server 2000和它的下一个版本都会承担和展现更多的功能和特色,无论XML还是数据存储本身,SQL Server都将不是一个简单的产品,而会象一个开发平台的方向迈进,借助XML,你会发现它能够更加紧密的和Microsoft的其它产品融合在一起,并且轻易地体现其重要的核心角色。

 

(之后的文章,我们可能会考察有关SQLXML更细节的一些特性亦或是最新的Microsoft SQL Server Notification Services的一些内容,我想它们都将是十分具体的SQLXML的应用和深入)

 

相关文件下载: SQLXML.zip ( 51K )

 

 

 


特别说明:

本文原创,CSDN署名首发,所有文字和图片版权所有。未经授权请勿传播、转载或改编。

如果有问题或建议,请发电子邮件给[email protected]

本文地址:http://com.8s8s.com/it/it45983.htm