一、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
相关推荐
Ado.net结构图 做设计时用的到 我找了很久才找到
### ADO.NET结构详解 #### 一、概述 ADO.NET是一种用于访问数据库和其他数据源的.NET数据提供程序。它的设计允许高性能的数据访问,并且能够独立于底层数据存储系统。ADO.NET支持多种数据源,包括SQL Server、...
### ADO.NET结构及常用方法 #### 一、概述 ADO.NET(ActiveX Data Objects .NET)是微软为.NET框架设计的数据访问技术,用于在Windows平台上实现与数据源的交互。与之前的ADO相比,ADO.NET提供了更为高效和灵活的...
ADO(ActiveX Data Objects)和ADO.NET是微软提供的两种数据访问技术,用于在应用程序和数据库之间建立连接,处理数据。这两个技术虽然都是用于数据访问,但它们分别属于不同的开发时代和框架。 **ADO(ActiveX ...
《基于ADO.NET与SQL2005的学生管理系统详解》 在信息技术日新月异的今天,学生管理系统已经成为教育机构日常管理的重要工具。本系统利用ADO.NET技术和SQL Server 2005数据库,实现了对学生的全面信息化管理,为教育...
ADO.NET是Microsoft开发的一种用于访问关系数据库的数据访问技术,它为.NET Framework应用程序提供了一套全面的数据访问组件。本文将深入探讨ADO.NET的核心概念、对象模型和数据操作。 首先,我们来看ADO.NET的设计...
### ADO.NET核心技术详解 #### 一、ADO.NET概述 ADO.NET是一组包含在.NET框架中的库,专门用于在.NET应用程序的各种数据存储之间进行通信。它不仅能够作为一个强大的、层次化的数据缓存来使用,还支持离线处理数据...
ADO.NET的体系结构主要包括以下组件: 1. **SqlConnection**: 这是.NET Framework提供的连接数据库的对象,负责建立与数据库之间的连接。它包含了打开、关闭连接以及执行SQL命令等相关操作。 2. **SqlCommand**: ...
7. **熟悉ADO.NET结构及包含的命名空间** - ADO.NET的主要命名空间包括`System.Data.SqlClient`(针对SQL Server)、`System.Data.OleDb`等。 - 每个命名空间下包含了用于连接、命令执行、数据填充等操作的相关类...
《ACCP5.0 ADO.NET酒店管理系统:深入解析三层架构》 在IT行业中,开发高效、稳定的管理系统是企业运营的重要支撑。ACCP5.0 ADO.NET酒店管理系统以其先进的三层架构,为酒店行业的信息化管理提供了强大的解决方案。...
讲解了数据结构,演示了如何用ado.net来解决具体的数据访问问题。重点讨论了ado.net如何有效地平衡"功能的泛化"和"执行效率",以及它如何解决对扩展性、并发性和可靠性的要求。针对其他数据访问api(包括ole db,ado...
ADO.NET 是 .NET Framework 中用于访问关系数据库的关键组件,它提供了与各种数据源(如 SQL Server、Oracle 等)交互的灵活性。在2021-09版的官方参考文档中,主要关注了DataSet、DataTable、DataView这三个核心类...
ADO.NET是微软.NET框架下的一种数据访问技术,用于与各种关系型数据库进行交互。它提供了一组组件和服务,使得开发者可以高效、灵活地存取和处理数据。在本"ADO.NET数据库访问技术案例教程"中,我们将深入探讨ADO...
本实验“ADO.NET大数据量操作数据库实验”聚焦于如何高效地在SQL Server中存储和处理大量数据。实验环境基于Visual Studio 2015(VS2015)和SQL Server 2008,采用多种方法来演示批量数据插入,包括常规方法、Bulk ...
讲解了数据结构,演示了如何用ADO.NET来解决具体的数据访问问题。重点讨论了ADO.NET如何有效地平衡"功能的泛化"和"执行效率",以及它如何解决对扩展性、并发性和可靠性的要求。针对其他数据访问API(包括OLE DB,ADO...
ADO.NET是微软.NET框架中用于访问数据库的核心组件,它提供了一组全面的接口和服务,使得开发者可以高效地处理数据。本课件将深入探讨ADO.NET的相关知识点,包括但不限于以下内容: 1. 数据访问架构:ADO.NET采用...
XML是一种用于存储和传输结构化数据的开放标准,而ADO.NET是Microsoft .NET Framework的一部分,用于处理数据库和其他数据源。 XML的主要特点包括其自描述性、平台独立性和语言无关性。它的结构化特性使得数据可以...
ADO.NET是微软.NET框架中一个重要的数据访问技术,主要用于与数据库进行交互。它提供了一组全面的组件和服务,使得开发者可以高效地构建数据驱动的应用程序。本书《ADO.NET技术内幕》深入探讨了这一核心技术,通过六...
`ADO.NET综合实例数据字典.rtf`可能是一份数据字典文档,列出了数据库表的结构、字段信息和相关约束。数据字典是数据库设计的重要组成部分,它帮助开发者理解数据库的逻辑结构,以便正确地编写SQL查询和操作数据。 ...