网站首页
IC库存
IC展台
电子资讯
技术资料
PDF文档
我的博客
IC72论坛
ic72 logo
搜索关键字: 所有资讯 行业动态 市场趋势 政策法规 新品发布 技术资讯 价格快报 展会资讯
  • 达普IC芯片交易网 > 新闻中心 > 技术资料 > 正文
  • RSS
  • C#中ADO.NET与XML数据交互技术
    http://www.ic72.com 发布时间:2009/9/23 9:30:45

      由于XML(Extensible Markup Language)具有良好的数据描述功能和存储格式,并且有很高的可扩展性和共享性,所以XML技术得到了快速发展及普遍应用。XML已成为从中间层传送数据到桌面的工具。由于XML的数据可以通过中间层代理与多种后端(数据库)源集成,所以XML技术已得到很多软件平台和数据库制造商的支持。Microsoft的.NET围绕XML这一核心提供了一个强大而快速的开发工具——C#,它具有前所未有的高开发效率。特别是在XML与ADO.NET编程方面,通过XML类和ADO.NET之间的紧密集成,将关系数据和XML在.NET框架中结合在一起。

         1 ADO.NET体系结构

      ADO.NET是由一系列的数据库相关类和接口组成的,它的基石是XML技术。通过ADO.NET不仅能访问关系型数据库中的数据,而且还能访问层次化的XML数据。

      ADO.NET提供了二种数据访问的模式,即连接模式(Connected)和非连接模式(Disconnected)。ADO技术中就有连接模式,而非连接模式是ADO.NET中才具有的。与传统的数据库访问模式相比,非连接模式为应用程序提供了更大的可升级性和灵活性。在该模式下,一旦应用程序从数据源中获得所需的数据,它就断开与原数据源的连接,并将获得的数据以关系数据库中表的形式存放在主存中。在应用程序处理完数据后,它再取得与原数据源的连接并完成数据的更新工作。

      ADO.NET中的DataSet类是非连接模式的核心,它提供了一个与数据来源无关的数据表示方式,数据集对象(DataSet)可以将其中的数据以XML的形式存放。用户既可以从远程或本地的一个数据库中获取数据集对象,也可以从一个XML数据流中获取数据集对象。而从用户的角度来看,数据源在哪里并不重要,也无需关心。这种统一的编程模型可被运用于任何使用了数据集对象的应用程序。

      在ADO.NET体系结构中还有一个非常重要的部分,即数据提供者对象(Data Provider),它是访问数据库的必备条件。通过它可以实现对实际数据库的操作,操作的结果或者在连接模式被直接处理,或者产生相应的数据集对象。.NET Data Provider是一个数据源和应用程序间尽可能小的层,从而在不牺牲功能的前提下提高了性能。

    图1为ADO.NET总体的体系结构。

    达普芯片交易网:www.ic72.com

        2  使用DataSet对象访问XML数据

        NET提供了一个XmlDataDocument类,它扩展了XmlDocument类。XmlDocument类不仅可以将XML文档载入内存的文档树中,还可以通过XmlDataDocument对象的DataSet属性存储、获取和操纵这些结构化的数据。DataSet对象在传输时是以XML流的形式,而不是用ADO中的Recordset对象的COM对象的形式,这使得在异构系统间传递数据更为方便。DataSet对象具有非常多的XML操作特性,通过它读取XML数据文件或数据流,从而将树型层次结构的XML数据转换为关系型数据结构的形式。对于树型层次结构的XML数据,要使用DOM对象模型来描述和操纵;对关系表要使用表(DataTable)、列(DataColumn)、行(DataRow)等对象来描述和操纵。这样,就可以使用.NET提供的DataSet对象和XmlDataDocument对象从二个不同的角度操纵内存中的同一数据。

      要对XML的数据集进行操作,首先要加载XML文件。XML文件有XSD Schema数据模式文件、XML无内联模式数据文件、XML内联模式数据文件等类型。读取XSD Schema数据模式文件可以使用DataSet对象的ReadXmlSchema方法从XSD文件或流中导入数据。ReadXmlSchema方法有多个重载版本,可以接受Stream、String、Textreader和XmlReader对象。通过这些对象中的任意一个可以告诉ReadXmlSchema方法从哪个XSD Schema文件或流中获取Schema。这种方法只能获取XML数据的组织模式,而不能获取XML数据。要读取XML数据文件可以使用DataSet对象的ReadXml方法从XML文件或流中导入数据。在读取的XML数据文件中,如果包含Schema数据组织方式,则这种方法可以在读取XML数据的同时使用内联的XSD Schema获取XML数据组织方式;如果在XML文件中不存在内联的Schema模式,则ReadXml方法会根据XML数据尝试推断的方法来生成Schema;如果在给定的XML数据中无法推断出Schema,则会抛出异常。例如:

      达普芯片交易网:www.ic72.com

      在导入XML XSD Schema文件或内联Schema的XML数据文件后,DataSet对象在数据集中建立相应的数据组织模式,通过DataSet对象的Tables属性,可以获取所有表的信息。对于每一个表,还具有一个Columns属性,根据该属性可以获取表中所有列的信息;对于每一列,通过DataType属性可以获取该列的数据类型。因此,可以在这些表和列的集合中进行循环,获取数据模式或数据。代码如下:

       达普芯片交易网:www.ic72.com

      DataSet对象的视图中可以包含XML文件中的所有数据,也可以根据需要只映射其中的一部分数据。为此,可以先生成一个不包含数据的DataSet对象,并为该对象定义数据组织模式,然后将它与一个XmlDataDocument对象同步,使用XmlDataDocument对象向其中填充数据。这时,DataSet对象的表名和列名作为数据组织模式的一部分,与XML文档中的部分标记相匹配,在XML文档中选取匹配的元素映射到DataSet数据集中。这样该数据集仅反映整个XML文档层次模式中用户所需要的部分,可以节约内存资源。但需注意的是所添加的表名和列名必须和XML文档中的元素严格匹配,否则会引发InvalidOperationException异常。例如:

      达普芯片交易网:www.ic72.com

         3 从数据库的表中输出XML数据

      SQL Server数据库具有输出XML数据的能力。SQL Server .NET Data Provider支持以XML形式表示的查询结果。下面介绍其他数据库表示为XML形式的方法。DataSet类作为ADO.NET中的非连接模式的核心,提供了一个与数据来源无关的数据表示方式。由于XML与DataSet类紧密集成,因此可以通过ADO.NET连接数据库并将操作结果生成DataSet数据集。有了DataSet数据集就可以将其数据输出为Xml Schema或XML文件的形式。输出方法有二种,一种是使用DataSet对象的GetXmlSchema方法输出Xml Schema,使用GetXml方法输出XML数据,GetXmlSchema、GetXml方法都返回一个字符串;另一种输出方法是调用DataSet对象中的WriteXml方法和WriteXmlSchema方法,WriteXml方法输出XML数据,WriteXmlSchema方法输出Xml Schema。这二个成员方法分别和ReadXml、ReadXmlSchema方法对应,也有多个重载版本,可以将数据和数据模式写到流对象、磁盘文件等。例如:

      OleDbConnection myConn=new OleDbConnection

             (″Provider=Microsoft.Jet.OLEDB.4.0;

             Data Source=....txl.mdb″);

      OleDbDataAdapter myCommand=new OleDbDataAdapter

             (″select *from b1″,myConn);

      DataSet ds=new DataSet();

      myCommand.Fill(ds,″b1″);

      //下面通过调用DataSet对象中的WriteXml方法,可以将

      //DataSet转换为XML文档,该方法中第一个参数为路径文

      //件名,第二个参数为XML文档增加了一个内联XSD模式,

      //描述DataSet的相关结构。

      ds.WriteXml(″....txl.xml″,XmlWriteMode.WriteSchema);

      如果拥有包含数据的DataSet对象而希望以XML层次模型的方式访问DataSet中的数据,则可以将该DataSet对象作为参数传递给XmlDataDocument对象的构造函数。XmlDataDocument中的数据是对DataSet对象中数据的引用,而不是拷贝,这样创建出来的XmlDataDocument对象将和DataSet对象同步。因此对这二个对象中任一对象数据的修改,将会实时地反映到另一对象中。创建过程如下:

        OleDbConnection myConn=new OleDbConnection

               (″Provider=Microsoft.Jet.OLEDB.4.0;

      Data Source=....txl.mdb″);

        OleDbDataAdapter myCommand=new OleDbDataAdapter

               (″select *from b1″,myConn);

        DataSet ds=new DataSet();

        myCommand.Fill(ds,″b1″);

      XmlDataDocument doc=new XmlDataDocument(ds);

        4  结束语

        XML和关系型数据表是二种有效的数据视图。.NET Framework提供了XmlDocument用来实现DOM编程接口,从而使用户可以从XML层次视图的角度处理数据。.NET Framework还提供了DataSet来表示关系数据模型,从而允许从二维表格、行、列和关系的角度来处理数据。在不同的应用场合下,要使用不同的数据视图来处理数据。XmlDataDocument对象集成了数据集对象DataSet和XML文档对象XmlDocument,利用它可以处理关系数据或XML数据,并自动维持关系数据视图和DOM视图,使其同步。


    www.ic72.com 达普IC芯片交易网
  • 行业动态
  • 市场趋势
  • 政策法规
  • 新品发布
  • Baidu

    IC快速检索:abcdefghijklmnopqrstuvwxyz0123456789
    COPYRIGHT:(1998-2010) IC72 达普IC芯片交易网
    客户服务:service@IC72.com 库存上载:IC72@IC72.com
    (北京)联系方式: 在线QQ咨询:点击这里给我发消息 联系电话:010-82614113 传真:010-82614123
    京ICP备06008810号-21 京公网安备 11010802032910 号 企业资质