`
zy77612
  • 浏览: 278246 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ADO.NET 结构

    博客分类:
  • .net
阅读更多

以前,数据处理主要依赖于基于连接的双层模型。当数据处理越来越多地使用多层结构时,程序员正在向断开方式转换,以便为他们的应用程序提供更佳的可缩放性。

ADO.NET 组件

可以使用 ADO.NET 的两个组件来访问和处理数据:

  • .NET Framework 数据提供程序

  • DataSet

.NET Framework 数据提供程序

.NET Framework 数据提供程序是专门为数据处理以及快速地只进、只读访问数据而设计的组件。Connection 对象提供与数据源的连接。Command 对象使您能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令。DataReader 从数据源中提供高性能的数据流。最后,DataAdapter 提供连接 DataSet 对象和数据源的桥梁。DataAdapter 使用 Command 对象在数据源中执行 SQL 命令,以便将数据加载到 DataSet 中,并使对 DataSet 中数据的更改与数据源保持一致。

DataSet

ADO.NET DataSet 专门为独立于任何数据源的数据访问而设计。因此,它可以用于多种不同的数据源,用于 XML 数据,或用于管理应用程序本地的数据。DataSet 包含一个或多个 DataTable 对象的集合,这些对象由数据行和数据列以及有关 DataTable 对象中数据的主键、外键、约束和关系信息组成。

下图说明 .NET Framework 数据提供程序与 DataSet 之间的关系。

 

ADO.NET 结构



 

选择 DataReader 或 DataSet

在决定应用程序应使用 DataReader(请参见使用 DataReader 检索数据)还是应使用 DataSet(请参见在 ADO.NET 中使用 DataSet)时,应考虑应用程序所需的功能类型。DataSet 用于执行以下功能:

  • 在应用程序中将数据缓存在本地,以便可以对数据进行处理。如果只需要读取查询结果,DataReader 是更好的选择。

  • 在层间或从 XML Web 服务对数据进行远程处理。

  • 与数据进行动态交互,例如绑定到 Windows 窗体控件或组合并关联来自多个源的数据。

  • 对数据执行大量的处理,而不需要与数据源保持打开的连接,从而将该连接释放给其他客户端使用。

如果不需要 DataSet 所提供的功能,则可以使用 DataReader 以只进、只读方式返回数据,从而提高应用程序的性能。虽然 DataAdapter 使用 DataReader 来填充 DataSet 的内容(请参见从 DataAdapter 填充 DataSet),但可以使用 DataReader 来提高性能,因为这样可以节省 DataSet 所使用的内存,并将省去创建 DataSet 并填充其内容所需的处理。

XML 和 ADO.NET

ADO.NET 利用 XML 的力量来提供对数据的断开式访问。ADO.NET 的设计与 .NET Framework 中 XML 类的设计是并进的,它们都是同一个结构的组件。

ADO.NET 和 .NET Framework 中的 XML 类集中于 DataSet 对象。无论 XML 源是文件还是 XML 流,都可以用来填充 DataSet。无论 DataSet 中数据的数据源是什么,DataSet 都可以作为符合万维网联合会 (W3C) 标准的 XML 进行编写,并且将其架构包含为 XML 架构定义语言 (XSD) 架构。由于 DataSet 固有的序列化格式为 XML,因此是在层间移动数据出色的媒介,这使 DataSet 成为在远程向 XML Web 服务发送数据和架构上下文以及从 XML Web 服务接收数据和架构上下文的最佳选择。

 

下文转自:http://blog.csdn.net/yhmhappy2006/article/details/3414633

.net(ADO.NET)数据库研究(1):部分主要类及类关系探秘

 

部分主要类及类图介绍

1DbConnection 抽象类

 

功能

表示到数据库的连接。

命名空间

System.Data.Common

程序集

System.Data(在 System.Data.dll 中)

继承层次结构

System..::.Object

  System..::.MarshalByRefObject

    System.ComponentModel..::.Component

      System.Data.Common..::.DbConnection

        System.Data.Odbc..::.OdbcConnection

        System.Data.OleDb..::.OleDbConnection

        System.Data.OracleClient..::.OracleConnection

        System.Data.SqlClient..::.SqlConnection

参考

http://msdn.microsoft.com/zh-cn/vcsharp/system.data.common.dbconnection.aspx

 

 

1 DbConnection类图继承关系

 

2DbCommand 抽象类

 

功能

表示要对数据源执行的 SQL 语句或存储过程。为表示命令的、数据库特有的类提供一个基类。

命名空间

System.Data.Common

程序集

System.Data(在 System.Data.dll 中)

继承层次结构

System..::.Object

  System..::.MarshalByRefObject

    System.ComponentModel..::.Component

      System.Data.Common..::.DbCommand

        System.Data.Odbc..::.OdbcCommand

        System.Data.OleDb..::.OleDbCommand

        System.Data.OracleClient..::.OracleCommand

        System.Data.SqlClient..::.SqlCommand

参考

http://msdn.microsoft.com/zh-cn/vcsharp/system.data.common.dbcommand.aspx

 

 

2 DbCommand类图继承关系

3: DbDataReader 抽象类

功能

从数据源读取行的一个只进流。

命名空间

System.Data.Common

程序集

System.Data(在 System.Data.dll 中)

继承层次结构

System..::.Object

  System..::.MarshalByRefObject

    System.Data.Common..::.DbDataReader

      System.Data..::.DataTableReader

      System.Data.Odbc..::.OdbcDataReader

      System.Data.OleDb..::.OleDbDataReader

      System.Data.OracleClient..::.OracleDataReader

      System.Data.SqlClient..::.SqlDataReader

参考

http://msdn.microsoft.com/zh-cn/vcsharp/system.data.common.dbdatareader.aspx

 

 

3 DbDataReader类图继承关系

4: DbDataAdapter 抽象类

功能

帮助实现 IDbDataAdapter 接口。DbDataAdapter 的继承者实现一组函数以提供强类型,但是继承了完全实现 DataAdapter 所需的大部分功能。表示用于填充 DataSet 和更新数据库的一组数据命令和一个数据库连接。

命名空间

System.Data.Common

程序集

System.Data(在 System.Data.dll 中)

继承层次结构

System.Object

   System.MarshalByRefObject

     System.ComponentModel.Component

       System.Data.Common.DataAdapter

        System.Data.Common.DbDataAdapter

           System.Data.Odbc.OdbcDataAdapter

           System.Data.OleDb.OleDbDataAdapter

           System.Data.OracleClient.OracleDataAdapter

           System.Data.SqlClient.SqlDataAdapter

           System.Data.SqlServerCe.SqlCeDataAdapter

参考

http://msdn.microsoft.com/zh-cn/library/system.data.common.dbdataadapter(VS.80).aspx

 

 

4  DbDataAdapter类图继承关系

 

5: DbCommandBuilder 抽象类

功能

自动生成用于协调 DataSet 的更改与关联数据库的单表命令。提供 DbCommandBuilder 类是为了方便提供程序编写者创建自己的命令生成器。通过继承此类,开发人员可在自己的代码中实现提供程序特定的行为。

命名空间

System.Data.Common

程序集

System.Data(在 System.Data.dll 中)

继承层次结构

System..::.Object

  System..::.MarshalByRefObject

    System.ComponentModel..::.Component

      System.Data.Common..::.DbCommandBuilder

        System.Data.Odbc..::.OdbcCommandBuilder

        System.Data.OleDb..::.OleDbCommandBuilder

        System.Data.OracleClient..::.OracleCommandBuilder

        System.Data.SqlClient..::.SqlCommandBuilder

参考

http://msdn.microsoft.com/zh-cn/library/system.data.common.dbcommandbuilder.aspx

 

 

5 DbCommandBuilder类图继承关系

 

6: DbParameter 抽象类

功能

表示 DbCommand 的参数,还可表示该参数到一个 DataSet 列的映射。

命名空间

System.Data.Common

程序集

System.Data(在 System.Data.dll 中)

继承层次结构

System..::.Object

  System..::.MarshalByRefObject

    System.Data.Common..::.DbParameter

      System.Data.Odbc..::.OdbcParameter

      System.Data.OleDb..::.OleDbParameter

      System.Data.OracleClient..::.OracleParameter

      System.Data.SqlClient..::.SqlParameter

参考

http://msdn.microsoft.com/zh-cn/library/system.data.common.dbparameter.aspx

 

 

6 DbParameter类图继承关系

 

下文转自:http://www.cnblogs.com/zxlin25/archive/2009/11/10/1599852.html

DataTable、DataView、DataSet 区别

一、DataTable

      DataTable表示内存中数据的一个表,它完全是在内存中的一个独立存在,包含了这张表的全部信息。DataTable可以是从通过连接从数据库中读取出来形成的一个表,一旦将内容读到DataTable中,此DataTable就可以跟数据源断开而独立存在;也可以是完全由程序自己通过代码来建立的一个表。

◆ DataColumn

一个表是由行和列组成的一个两维的结构。表的结构是由DataColumn 对象的集合组成,DataColumn 对象集合可由DataTable.Columns 属性中能获取到,通过定义每一列的数据类型来确定表的架构,类似数据库中定义表。定义完表的结构就可以根据结构来生成DataRow,用DataTable.NewRow()方法来生成此DataTable结构的新行。
一个DataTable是由DataRow的集合组成的, DataRow的集合这个可以由DataTable.Rows 属性来访问。

DataTable还可以通过现有的列用Expression 属性的表达式创建一些列。

1、创建计算出的列
比如:已经有了一个表结构,表中有一个DataColumn的集合,其中有一个叫UnitPrice的列,你可以新建一个DataColumn,设置好ColumnName,再设置此列的表达式,DataColumn.Expression = "UnitPrice * 0.086",这个列的值就是名字为UnitPrice的列计算出来的,在创建表达式时,使用 ColumnName 属性来引用列。

2、第二个用途是创建聚合列
聚合列聚合通常沿着关系执行(有关关系的描述见下面DataRelation部分),如果order表有名为 detail 的子表,两个表之间通过order.orderid和detail.orderid两个列建立一个关系 DataRelation 对象名为“order2detail”,在主表order中就可以建立一个聚合列,将计算每个order在detail表中含有的所有item的价格的和:DataColumn.Expression = “sum(child(order2detail).price)",child(order2detail)表示通过关系order2detail联系到的子表,child(order2detail).price就表示子表的price列。

 

◆ DataRow

DataRow对象没有直接在代码中使用的构造函数,一般是从具有一定结构的DataTable用NewRow()方法来新建一个DataRow对象。一个DataRow根据其是独立的,还是属于某个DataTable,是否修改过,是否被DataTable删除等等不同的情况有不同的状态,由 DataRow.RowState属性公开,如下表:

成员名称

说明

Added
该行已添加到 DataRowCollection 中,AcceptChanges 尚未调用。Deleted 该行已通过 DataRow 的 Delete 方法被删除。

Deleted
该行已通过 DataRow 的 Delete 方法被删除。

Detached
该行已被创建,但不属于任何 DataRowCollection。DataRow 在以下情况下立即处于此状态:创建之后添加到集合中之前;或从集合中移除之后。

Modified
该行已被修改,AcceptChanges 尚未调用。

Unchanged
该行自上次调用 AcceptChanges 以来尚未更改。

一个DataRow对象刚被创建之后其状态是Detached,是孤立的一个存在,所以建立了DataRow之后在DataRow中的单元填充了数据后还要通过DataTable.Rows.Add(DataRow)方法将此DataRow添加到DataTable,DataRow添加到 DataTable后, 这个DataRow的状态就转变为Added。当修改了这个DataRow后,这个DataRow状态转为Modified,当用 DataRow.Delete()方法删除DataRow后,DataRow状态将转为Deleted,不过此行还存在在DataTable中的,只是状态改变了,这时用DataTable.Rows.Count查看行数,跟删除前是一样的。只有在调用了 DataTable.Remove(DataRow)方法后,此DataRow才被从DataTable移除,状态也回复到Detached孤立状态。

一旦调用了DataTable.AcceptChanges()方法后,所有的行将根据不同的状态做不同的处理,Added、Modified、 Unchanged将保留当前值,Deleted的行将从DataTable中移除,最后所有的行的状态都置为Unchanged。当DataTable 是从DataAdapter.Fill(DataSet,DataTable)方法填充而形成的,Fill()方法将自动调用 AcceptChanges()方法,将DataTable的行状态都置为Unchanged。并且,如果Fill方法中指定的那个DataTable在要填充的那个DataSet不存在时,会生成一个跟数据源表同样的结构的DataTable并填充数据。

 

◆ DataRelation

表示两个 DataTable 对象之间的父/子关系。可以类比于数据库中的表之间的关系,父表相当于关系列为主键的表,子表相当于关系列为外键的表。DataRelation 构造函数一般为:DataRelation(String, DataColumn, DataColumn) ,string为关系名,第一个DataColumn为建立关系的父表列,第二个DataColumn为建立关系的子表列,建立关系的两个列的 DataType 值必须相同。

建立好了关系,必须把这个关系加入到DataTable的ParentRelations属性或ChildRelations 属性,这两个属性包含这个表的所有的跟父表的关系和跟子表的关系。若关系中此表是父表则将此关系加入到ChildRelations集合中,否则加入到ParentRelations集合中。

 

二、DataView

DataView表示用于排序、筛选、搜索、编辑和导航的 DataTable 的可绑定数据的自定义视图。可以将DataView同数据库的视图类比,不过有点不同,数据库的视图可以跨表建立视图,DataView则只能对某一个DataTable建立视图。DataView一般通过DataTable.DefaultView 属性来建立,再通过通过RowFilter 属性和RowStateFilter 属性建立这个DataTable的一个子集。

RowFilter属性用来筛选要查看DataTable中哪些行的表达式,这个表达式同上面所说的建立计算列的表达式相同。例如:"LastName = 'Smith'",这就是只查看列LastName的值为'Smith'的那些数据行。

RowStateFilter 属性用来设置 DataView 中的行状态筛选器,上面介绍DataRow时介绍了DataRow的状态,一个DataRow可能有五种状态,RowStateFilter就是可以通过这些状态来筛选要查看的行集。其实DataRow不仅有五种状态,DataRow还有版本的问题,比如当DataRow的状态为Modified,即这行已经被修改了,这时这个DataRow就会有两个版本,Current版本和Original版本(修改前的)。实际上RowStateFilter属性是综合了DataRow的状态和版本来筛选的(RowStateFilter确省值是CurrentRows)见下表:

成员名称

说明

Added
一个新行。

CurrentRows
包括未更改行、新行和已修改行的当前行。

Deleted
已删除的行。

ModifiedCurrent
当前版本,原始数据(请参阅 ModifiedOriginal)的修改版本。

ModifiedOriginal
原始版本(尽管它后来已被修改并以 ModifiedCurrent 形式存在)。

None
无。

OriginalRows
包括未更改行和已删除行的原始行。

Unchanged
未更改的行。

 

DataView.Count属性得到的计数是在应用了 RowFilter 和 RowStateFilter 之后,获取 DataView 中记录的数量。

DataView是建立在DataTable基础上的,DataView.Table 属性可以得到此DataView对应的那个DataTable。DataView的行叫DataRowView,可以从DataRowView直接通过DataRowView.Row 属性得到此DataRowView对应的DataRow。

 

三、GridView

这里说的GridView是winform中的GridView,一般都是跟DataView绑定来显示DataTable中的数据,和修改DataTable中的数据。

GridView通过DataSource 和 DataMember 属性来绑定其要显示的数据源。数据源一般是DataTable、DataView、DataSet等,不过将这些数据源绑定到GridView时实际上是绑定的DataView。若数据源是DataTable时,实际上是绑定了此DataTable的DefaultView,若数据源是DataSet时,则可以向 DataMember 属性设置一个字符串,该字符串指定要绑定到的表,然后再将DataMember指定的那个DataTable的DefaultView绑定到 GridView。

所以GridView实际显示的是DataTable经过筛选的DataView

 

 

 

  • 大小: 18.1 KB
分享到:
评论

相关推荐

    Ado.net结构图

    Ado.net结构图 做设计时用的到 我找了很久才找到

    ADO及ADO.NET结构图

    ADO及ADO.NET结构图 ADO及ADO.NET结构图 ADO及ADO.NET结构图 ADO及ADO.NET结构图

    ADO.Net结构及常用方法

    ADO.Net结构及常用方法!!!ADO.Net结构及常用方法!!!ADO.Net结构及常用方法!!!ADO.Net结构及常用方法!!!

    ADO.NET结构

    该文档讲述ADO.NET的结构,主要包括命名空间、类(命名空间中的类、数据库类)、对象。异常处理以及使用事物。

    ado[1].net中文手册 学习 ado.net的重要资料

    ADO.NET 结构:提供 ADO.NET 结构和组件的概述。 .NET 数据提供程序:提供有关随 ADO.NET 提供的 .NET 数据提供程序和 .NET 数据提供程序的设计的概述。 ADO.NET DataSet:提供有关 DataSet 设计和组件的概述。 为 ...

    ADO.NET常用对象

    在ADO.NET结构中,常用的组件(对象)有五个,Connection对象、Command对象、DataReader对象、DataApdapter对象和DataSet对象,其中Connection对象、Command对象、DataReader对象,和DataApdapter对象被称为数据提供...

    ADO.NET本质论

    讲解了数据结构,演示了如何用ADO.NET来解决具体的数据访问问题。重点讨论了ADO.NET如何有效地平衡"功能的泛化"和"执行效率",以及它如何解决对扩展性、并发性和可靠性的要求。针对其他数据访问API(包括OLE DB,ADO...

    ADO.NET本质论.pdf

    讲解了数据结构,演示了如何用ado.net来解决具体的数据访问问题。重点讨论了ado.net如何有效地平衡"功能的泛化"和"执行效率",以及它如何解决对扩展性、并发性和可靠性的要求。针对其他数据访问api(包括ole db,ado...

    ADO.NET专业项目实例开发下载

    本书是学习ADO.NET编程的优秀参考书,其主要内容有:第一部分概述了有关ADO.NET编程的重要概念,如ADO.NET的体系结构、数据适配器、数据集和数据表的使用;第二部分到第九部分中,每部分都围绕一个专业项目展开讨论...

    ACCP5.0 ADO.NET酒店管理系统(三层架构)

    ACCP5.0 ADO.NET酒店管理系统(三层架构) 内含数据库 图片 代码齐全 绝对实用

    ADO.NET ADO

    ADO.NET DataSet是ADO.NET结构的核心组建, DataSet中包括一个或多个DataTable对象的集合,这些对象由数据行和数据列以及主键、外键、约束和有关DataTable对象中数据的关系信息组成。 ADO.NET的另外一个核心元素是...

    用ADO.NET三层结构写的图书馆管理系统

    这是我在学习了。net后完成的一个项目 用的是.net中的三层

    ADO.NET的连接式和断开式

    ADO.NET的连接式和断开式

    ado.net 中文手册(html)

    内容如下: ado.net 概述 ado.net 的设计目标 ado.net 结构 .net 数据提供程序 ado.net dataset 为 .net 数据提供程序编写通用代码 ado.net 示例应用程序 使用.net数据提供程序访问...

    ADO.NET结构PPT

    winForm的入门第一课,感觉挺重要的

    数据结构ADO.net访问数据库

    数据结构ADO.net访问数据库内涵详细信息

    ADO.NET –连接数据库

    ADO.NET –连接数据库 ADO.NET从数据库中检索全部数据并将这些数据缓存到客户端计算机上,仅在需要从数据库中检索数据时才建立连接,这种结构通常称为断开式数据结构。

    ADO.NET高级编程

    本书采用了大量实例和技术,介绍了ADO.NET的应用方法,主要内容涉及ADO.NET数据提供者的体系结构、数据读取器、数据适配器和DataSet ,使用XML模式和强类型化数据集开发安全的应用程序、ADO.NET对事务处理的支持,...

    第6章 数据库和ADO.NET

    数据访问技术是任何实际应用程序的核心部分,我们在设计应用程序、尤其是分布式...本章主要围绕有关数据库的基本概念、基本操作及ADO.NET数据模型的基本结构等内容展开。并重点介绍ADO.NET2.0组件所涉及到的数据操作。

    C#ADO.NET技术完整学生管理系统简单三层结构版

    C#ADO.NET技术完整学生管理系统简单三层结构版

Global site tag (gtag.js) - Google Analytics