比较XML数据存取APIs(续)

发表于:2007-06-30来源:作者:点击数: 标签:
SQL XML 3.0的安装将Microsoft.Data.SqlXml集合装到你的机子上。给项目添加对该集合的一个引用,并用以下代码引入名字空间:using Microsoft.Data.SqlXml; 以下代码连接到 数据库 ,并用SQLXML类来执行SELECT语句:public string ExecuteSqlXmlSelect( strin
SQLXML 3.0的安装将Microsoft.Data.SqlXml集合装到你的机子上。给项目添加对该集合的一个引用,并用以下代码引入名字空间:using Microsoft.Data.SqlXml;




以下代码连接到数据库,并用SQLXML类来执行SELECT语句:public string ExecuteSqlXmlSelect(
   string CustomerID,
   string ConnectionString,
   bool ClientSide)
   {
   SqlXmlCommand cmd = new
      SqlXmlCommand(ConnectionString);
   cmd.RootTag = "Employees";
   cmd.ClientSideXml = ClientSide;
   cmd.CommandText = "SELECT * FROM
      Customers WHERE CustomerID = @#" +
      CustomerID + "@# FOR XML RAW";
   XmlReader xr =
      cmd.ExecuteXmlReader();
   XmlDocument xd = new XmlDocument();
   xd.Load(xr);
   return xd.OuterXml;
}




该代码所做的第一件事就是通过将连接字符串传递到构造器来创建必要的SqlXmlCommand对象。由FOR XML创建的XML通常是一个XML片段,并不是格式规范的文件。为了使XML格式规范,你必须用RootTag属性在Command对象上设置一个根标签,在本例中设置成“employees”。

SQLXML功能包的以前的版本在将XML返回给客户端前在数据库服务器上构造XML。这会造成可扩展性方面的问题,因为创建的XML没有分布给客户端,所以产生的XML流比默认情况下SQL Server返回的本地二进位数据流要大很多。3.0版本允许SQLXML将数据流作为二进位数据返回给客户端,然后在客户端上将数据转换成XML。

将数据转换成XML
将ClientSideXml属性设置成True来实现这一步。你仍然用带有FOR XML子句的SELECT语句,但是当你将ClientSideXml设置为True时,在将语句传送到SQL Server前,托管类将FOR XML子句从SQL语句中去掉了。数据库不再看到FOR XML子句,可以更有效地将数据流返回给客户端。然后,SQL托管类在客户端将数据流转换成XML。

通过调用ExecuteXmlReader方法来执行SELECT语句,该方法返回一个XmlReader对象。然后,你将XmlReader对象载入一个XmlDocument,并将产生的OuterXml返回给调用者。

最后一个数据存取API是运用ADO 2.6和Visual Basic 6.0。通过打开一个新的VB6 ActiveX DLL项目来创建这个项目。重新命名Class1为ADO26,命名项目为DBXMLVS6。然后,给项目添加ActiveX Data Objects 2.6引用。一旦完成这一步,就给你的类添加ExecuteSelect方法(见列表3)。

同所有其它例子一样,你先要创建并打开你的数据库连接。然后,创建新的Command对象,并给Connection对象设置其ActiveConnection属性。SELECT语句同ADO.NET例子中用的SELECT语句一样。




图1.
将Execute方法的返回值设置给RecordSet对象。你需要创建一个ADO Stream对象将结果集转换成XML。将Stream的Type属性设置成adTypeText,并打开它。打开后,在你的结果集上调用Save方法,指明你想把结果集保存为XML。一旦XML在数据流中,用ReadText方法将它返回给调用者。
通过创建简单的ASP和ASP.NET页面,调用组件并将XML返回给浏览器,我们就可以测试每种API实现的性能和可扩展性(在中可以看到结果,关于更详细的结果,请参考工具条“”。关于这些ASP和ASP.NET页面,请在此。)
随着Microsoft不断增加新的功能并改进性能,XML数据存取APIs也在不断发展。因为未来的SQL Server版本将增加对XML的本地支持,而且APIs通过利用这些功能得以不断增强,所以API不断发展的这个趋势也将持续下去。然而,如今现有的APIs已经提供了强大的功能和性能组合,可以使你构建高性能的XML应用程序。
关于作者:
Greg Ewing是Clarity Consulting Inc.的顾问。除了为VSM、MSDN和内部刊物撰写文章外,Greg还负责几种技术的内部培训,包括C#、高级VB.NET、C++和COM。他的联系方式是。
Jon Rauschenberger是Clarity Consulting Inc.的合作伙伴和技术主管,这是一家位于芝加哥的信息技术咨询公司和Microsoft Gold Certified Partner。除了构建可扩展的基于 Web的解决方案外,Jon也在诸如Microsoft Tech-Ed、VBITS、COMDEX和DevDays这样的大会上做演讲。Jon也是芝加哥MSDN地区主管。联系方式。

原文转自:http://www.ltesting.net