ADO.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

 

 

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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值