DataSet对象深入分析.doc_第1页
DataSet对象深入分析.doc_第2页
DataSet对象深入分析.doc_第3页
DataSet对象深入分析.doc_第4页
DataSet对象深入分析.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

深入分析ADO.NET中的DataSet对象ADO.NET是.Net FrameWork SDK中用以操作数据库的类库的总称。而DataSet类则是ADO.NET中最核心的成员之一,也是各种开发基于.Net平台程序语言开发数据库应用程序最常接触的类。之所以DataSet类在ADO.NET中具有特殊的地位,是因为DataSet在ADO.NET实现从数据库抽取数据中起到关键作用,在从数据库完成数据抽取后,DataSet就是数据的存放地,它是各种数据源中的数据在计算机内存中映射成的缓存,所以有时说DataSet可以看成是一个数据容器。同时它在客户端实现读取、更新数据库等过程中起到了中间部件的作用(DataReader只能检索数据库中的数据)。各种.Net平台开发语言开发数据库应用程序,一般并不直接对数据库操作(直接在程序中调用存储过程等除外),而是先完成数据连接和通过数据适配器填充DataSet对象,然后客户端再通过读取DataSet来获得需要的数据,同样更新数据库中数据,也是首先更新DataSet,然后再通过DataSet来更新数据库中对应的数据的。可见了解、掌握ADO.NET,首先必须了解、掌握DataSet。DataSet主要有三个特性:1. 独立性。DataSet独立于各种数据源。微软公司在推出DataSet时就考虑到各种数据源的多样性、复杂性。在.Net中,无论什么类型数据源,它都会提供一致的关系编程模型,而这就是DataSet。2. 离线(断开)和连接。DataSet既可以以离线方式,也可以以实时连接来操作数据库中的数据。这一点有点像ADO中的RecordSet。3. DataSet对象是一个可以用XML形式表示的数据视图,是一种数据关系视图。一.DataSet对象的结构模型及和RecordSet的比较虽说ADO.NET是 ADO在.Net平台下得后继版本,但二者的区别是很大的。突出表现在ADO中的RecordSet对象和ADO.NET中的DataSet对象。RecordSet其实也是非常灵活的一个对象,微软公司推出它也是煞费苦心,如:RecordSet可以离线操作数据库,性能优良,效率较高等等这些都让当时的程序员为之一振。RecordSet虽然已经很复杂,但DataSet却比RecordSet复杂的多,我们知道每一DataSet往往是一个或多个DataTable 对象的集合,这些对象由数据行和数据列以及主键、外键、约束和有关DataTable对象中数据的关系信息组成。而RecordSet只能存放单张数据表,虽然这张数据表可以由几张数据表JOIN生成。所以有些时候说,RecordSet更类似于DataSet中的DataTable。DataSet对象的结构模型如图01所示:图01:DataSet对象的结构模型图通过图01可见在DataSet对象结构还是非常复杂的,在DataSet对象的下一层中是DataTableCollection对象、DataRelationCollection对象和ExtendedProperties对象。上文已经说过,每一个DataSet对象是由若干个DataTable对象组成。DataTableCollection就是管理DataSet中的所有DataTable对象。表示DataSet中两个DataTable对象之间的父/子关系是DataRelation对象。它使一个DataTable 中的行与另一个DataTable中的行相关联。这种关联类似于关系数据库中数据表之间的主键列和外键列之间的关联。DataRelationCollection对象就是管理DataSet中所有DataTable之间的DataRelation关系的。在DataSet中DataSet、DataTable和DataColumn都具有ExtendedProperties属性。ExtendedProperties其实是一个属性集(PropertyCollection),用以存放各种自定义数据,如生成数据集的SELECT语句等。二使用DataSet:DataSet其实就是数据集,上文已经说过DataSet是把数据库中的数据映射到内存缓存中的所构成的数据容器,对于任何数据源,它都提供一致的关系编程模型。在DataSet中既定义了数据表的约束关系以及数据表之间的关系,还可以对数据表中的数据进行排序等。DataSet使用方法一般有三种:1. 把数据库中的数据通过DataAdapter对象填充DataSet。2. 通过DataAdapter对象操作DataSet实现更新数据库。3. 把XML数据流或文本加载到DataSet。下面就来详细探讨以上DataSet使用方法的具体实现,使用语言是C。1. 把数据库中的数据通过DataAdapter对象填充DataSet:掌握DataSet使用方法必须掌握ADO.NET另外一个核心常用成员-数据提供者(Data Provider)。数据提供者(也称为托管提供者Managed Provider)是一个类集合,在.Net FrameWork SDK 1.0中数据提供者分为二种:The SQL Server .NET Data Provider和The OLE DB .NET Data Provider。而到了.Net FrameWork SDK 1.1时,ADO.NET中又增加了The ODBC .NET Data Provider和 The Oracle .NET Data Provider二个数据提供者。The SQL Server .NET Data Provider的操作数据库对象只限于Sql Server 7.0及以上版本,Oracle .NET Data Provider的操作数据库对象只限于Oracle 8.1.7及以上版本。而The OLE DB .NET Data Provider和The ODBC .NET Data Provider可操作的数据库类型就相对多了许多,只要它们在本地分别提供Ole Db提供程序和ODBC提供程序。在这些数据提供者中都有一个DataAdapter类,如:OLE DB .NET Framework 数据提供者中是 OleDbDataAdapter类,The SQL Server .NET Framework 数据提供者中是SqlDataAdapter类,The ODBC .NET Framework 数据提供者中是OdbcDataAdapter类。通过这些DataAdapter就能够实现从数据库中检索数据并填充 DataSet 中的表。DataAdapter填充DataSet的过程分为二步:首先通过DataAdapter的SelectCommand属性从数据库中检索出需要的数据。SelectCommand其实是一个Command对象。然后再通过DataAdapter的Fill方法把检索来的数据填充 DataSet。代码清单01就是以Microsoft SQL Server 中的Northwind数据库为对象,C使用The SQL Server .NET Data Provider中的SqlDataAdapter填充DataSet的具体实现方法:代码清单01:SqlConnection sqlConnection1 = new SqlConnection ( Data Source=localhost ;Integrated Security=SSPI ;Initial Catalog=Northwind ) ;/创建数据连接SqlCommand selectCMD = new SqlCommand ( SELECT CustomerID , CompanyName FROM Customers , sqlConnection1 ) ;/创建并初始化SqlCommand对象SqlDataAdapter sqlDataAdapter1 = new SqlDataAdapter ( ) ;custDA.SelectCommand = selectCMD ;sqlConnection.Open ( ) ;/创建SqlDataAdapter对象,并根据SelectCommand属性检索数据DataSet dsDataSet1 = new DataSet ( ) ;sqlDataAdapter1.Fill ( dsDataSet1 , Customers ) ;/使用SqlDataAdapter的Fill方法填充DataSetsqlConnection.Close ( ) ;/关闭数据连接对于其他数据提供者的DataAdapter,具体的实现检索数据库中的数据并填充DataSet的实现方法类似于以上方法。2. 通过DataAdapter对象操作DataSet实现更新数据库:DataAdapter是通过其Update方法实现以DataSet中数据来更新数据库的。当DataSet实例中包含数据发生更改后,此时调用Update方法,DataAdapter 将分析已作出的更改并执行相应的命令(INSERT、UPDATE 或 DELETE),并以此命令来更新数据库中的数据。如果DataSet中的DataTable是映射到单个数据库表或从单个数据库表生成,则可以利用 CommandBuilder 对象自动生成 DataAdapter 的 DeleteCommand、InsertCommand 和 UpdateCommand。使用DataAdapter对象操作DataSet实现更新数据库具体的实现方法,只需把下面的代码清单02添加到代码清单01之后,二者合并即可实现删除Customers数据表中第一行数据:代码清单02:SqlCommandBuilder sqlCommandBuilder1 = new SqlCommandBuilder ( sqlDataAdapter1 ) ;/以sqlDataAdapter1为参数来初始化SqlCommandBuilder实例dsDataSet1.TablesCustomers.Rows0.Delete ( ) ;/删除DataSet中删除数据表Customers中第一行数据sqlDataAdapter1.Update ( dsDataSet1 ,Customers ) ;/调用Update方法,以DataSet中的数据更新从数据库dsDataSet1.TablesCustomers.AcceptChanges ( ) ;由于不了解DataSet结构和与数据库关系,很多初学者往往只是更新了DataSet中的数据,就认为数据库中的数据也随之更新,所以当打开数据库浏览时发现并没有更新数据,都会比较疑惑,通过上面的介绍,疑惑应当能够消除了。3. XML和DataSet:DataSet中的数据可以从XML数据流或文档创建。并且.Net Framework可以控制加载XML数据流或文档中那些数据以及如何创建DataSet的关系结构。加载XML数据流和文档到DataSet中是可使用DataSet对象的ReadXml方法(注意:ReadXml来加载非常大的文件,则性能会有所下降)。ReadXml 方法将从文件、流或 XmlReader 中进行读取,并将 XML 的源以及可选的 XmlReadMode 参数用作参数。该ReadXml方法读取 XML 流或文档的内容并将数据加载到 DataSet 中。根据所指定的XmlReadMode和关系架构是否已存在,它还将创建DataSet的关系架构。三DataSet和数据绑定(DataBinding)数据绑定是数据绑定是绑定技术中使用最频繁,也是最为重要的技术,也可以说是各种.Net开发语言开发数据库应用程序最需要掌握的基本的知识之一。数据绑定之所以很重要,是因为在.Net FrameWork SDK中并没有提供数据库开发的相关组件,即如:DbTextBox、DbLabel等用于数据库开发的常用组件在.Net FrameWork SDK中都没有。而数据绑定技术则能够把TextBox组件改造成DbTextBox组件,把Label组件改造成DbLabel组件等等。所有这些都与DataSet有直接关系。数据绑定分成二类:简单型数据绑定和复杂型数据绑定。适用于简单型数据绑定组件一般有Lable、TextBox等,适用于复杂性数据绑定的组件一般有DataGrid、ListBox、ComboBox等。其实简单型数据绑定和复杂性数据绑定并没有明确的区分,只是在组件进行数据绑定时,一些结构复杂一点的组件在数据绑定时操作步骤相近,而另外一些结构简单一点的组件在数据绑定时也比较类似。于是也就产生了二个类别。以下就结合TextBox组件和DataGrid组件分别探讨DataSet在实现简单型数据绑定和复杂性数据绑定作用和具体实现方法。1. 简单型数据绑定:简单型数据绑定一般使用这些组件中的DataBindings属性的Add方法把DataSet中某一个DataTable中的某一行和组件的某个属性绑定起来,从而达到显示数据的效果。TextBox组件的数据绑定具体实现方法是在代码清单01后,再添加代码清单03中的代码,代码清单03中的代码是把DataSet中的Customers 数据表中的CustomerID的数据和TextBox的Text属性绑定起来,这样DbTextBox就产生了。其他适用于简单型数据绑定组件数据绑定的方法类似与此操

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论