DataSet与DataTable的区别
- 格式:doc
- 大小:21.50 KB
- 文档页数:1
DataTable,DataView和DataGrid中一些容易混淆的概念一、DataTableDataTable表示内存中数据的一个表,它完全是在内存中的一个独立存在,包含了这张表的全部信息。
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列。
6.2.4 使用DataSet和DataAdapter对象查询数据基于集的访问有两类方式,一个是DataSet,该类相当于内存中的数据库,在命名空间System.Data中定义;另外一个类是DataAdapter,该类相当于DataSet和物理数据源之间的桥梁。
从本质上讲,DataAdapter类是两个类的结合,因为其有SqlDataAdapter和OleDbDataAdapter 两个版本。
DataSet对象简介DataSet对象是支持的断开式或分布式数据方案的核心对象,是创建在内存中的集合对象。
它可以包含任意数量的数据表,以及所有表的约束、索引和关系,相当于在内存中的一个小型关系数据库。
一个DataSet对象包括一组DataTable对象和DataRelation对象,其中每个DataTable对象由DataColumn、DataRow和DataRelation对象组成。
因此可以直接使用这些对象访问数据集中的数据。
例如,用户在访问数据集中某数据表的某行某列的数据时,可使用如下格式。
DataSet.Tables["数据表名"].Rows[n][ "列名"] (注:n表示行号,从0开始)DataSet由大量相关的数据结构组成。
DataSet是一个完整的数据集。
在DataSet内部,主要可以存储5种对象,如表1所示。
对象功能DataTable 使用行、列形式来组织的一个矩型数据集DataColumn 一个规则的集合,描述决定将什么数据存储到一个DataRow中DataRow 由单行数据库数据构成的一个数据集合,该对象是实际的数据存储Constraint 决定能进入DataTable的数据DataRelation 描述了不同的DataTable之间如何关联表6.7 DataSet对象介绍及功能注意:在DataSet内部是一个或多个DataTable的集合。
在每个DataRow、DataColumn和Constraint的集合以及DataRelation的两个集合。
一、简介是微软公司推出的一个面向对象的编程语言,可运行于.NET Framework之上。
DataSet 是System.Data命名空间中用来表示数据的一种类,它是 DataSet 类的实例。
DataSet 既可以表示一个与数据源无关的数据集,又可以表示一个数据源。
在 中使用DataSet 可以进行数据的插入、更新、删除和查询等操作。
本文将介绍在 中如何使用 DataSet 类进行数据操作的方法。
二、创建 DataSet1. 在 中可以通过声明 DataSet 类的实例来创建一个 DataSet 对象,例如:Dim ds As New DataSet()2. 也可以使用 Visual Studio 的数据工具栏,在界面上直接拖拽一个DataSet 控件来创建一个 DataSet 对象。
三、添加 DataTable1. DataSet 是由多个 DataTable 组成的,DataTable 是表示数据表的一种类。
可以通过以下方法为 DataSet 添加 DataTable:ds.Tables.Add("TableName")2. 也可以在 Visual Studio 的数据工具栏中直接添加一个 DataTable 控件。
四、添加数据1. 可以通过以下方法向 DataTable 中添加数据行:Dim dr As DataRowdr = ds.Tables("TableName").NewRow()dr("ColumnName") = "Value"ds.Tables("TableName").Rows.Add(dr)2. 也可以通过 DataAdapter 的 Fill 方法向 DataTable 中添加数据:Dim da As New SqlDataAdapter("SELECT * FROM TableName", "ConnectionString")da.Fill(ds, "TableName")五、更新数据1. 可以直接修改 DataTable 中的数据,然后通过 DataAdapter 的Update 方法将修改同步到数据库中。
DataSet、DataTable、DataView三者关系及DataView常见用法DATASET 可以理解为是个数据库。
DATATABLE 可以理解为是个数据表。
DATAVIEW 可以理解为是表的视图。
dataset 数据集合可以包含多个datatable,而datatable可以声明多个dataview。
dataview是个虚拟的视图,用于数据展示层,可以通过对它的RowFilter、Sort属性的设置,控制输出想要的数据集合。
DataView过滤和排序1 //假设有个DataT able2 DataTable dt=new DataTable();3 //转成一个DataView4 DataView dv=dt.DefaultView;5 //加上过滤条件6 dv.FilterSort=" 员工='张三'";7 //重新转化为新DataTable8 DataTable newTable=dv.ToTable();//员工ID大于5且生日小于?dv.RowFilter = "EmployeeID >5 AND Birthdate < #1/31/82#";//描述类似于product关键字dv.RowFilter = "Description LIKE '*product*'";//员工ID等于 2 or 4 or 5dv.RowFilter = "employeeID IN (2,4,5)";//如果在LIKE子句中已经有了*或%字符,你必须用方括号将其括起,以免歧义。
如果很不幸,字符串中方括号本身也存在了,那么它也必须用将本身括起dv.RowFilter = "Description LIKE '[[]*[]]product[[]*[]]";//员工ID小于6且名字字数偶数,员工ID大于6且名字字数奇数dv.RowFilter="IIF(employeeID<6, Len(lastname) %2 =0, Len(lastname) %2 >0)";//排序//正序dv.Sort = "ID asc";//倒序dv.Sort = "ID desc";//多个排序view.Sort = "ID DESC,Name ASC";。
按照如下学习目标进行学习:1、DataSet和DataTable概述2、DataSet 的属性以及方法3、数据表DataTable的创建4、排序和筛选数据第一部分讲解DataSet和DataTable概述在这一部分重点讲解DataSet和DataTable的概念以及DataSet对象模型。
通过下图,先讲解DataSet和DataTable之间的关系。
数据集是包含数据表的对象,这里的数据集只的就是DataSet,而数据表指的就是DataTable,这些数据表可以临时存储数据,以便供应用程序使用。
一个数据集里面可以存储多个数据表,而数据集在本地内存中为应用程序提供了待用数据库的缓存,因此可以跟踪数据更新,并在应用程序重新连接时,将更新发回数据库。
DataSet的结构类似于关系数据库的结构,它公开表、行、列、约束和关系的分层对象模型。
数据集位于System.Data命名空间中。
我们现在先来看看DataSet,而后将会详细的讲解DataTable。
在讲解DataSet的时候,重点根据DataSet对象模型进行讲解:●DataTableCollection:表示DataSet的表集合。
●DataRelationCollection:表示此DataSet的DataRelation对象的集合。
●ExtendedProperties:获取用户定义的约束属性的集合。
接着重点讲解一下DataSet层次结构中的类:第二部分讲解DataSet 的属性以及方法以及使用Tables属性▪获取DataSet结果集中的数据表。
Relations属性▪获取用于多个数据表联系起来的数据联系集合。
同学们已经了解了DataSet中的一些重要的成员属性以及方法,下面在课堂实例中让同学们做一个查看上一条记录、下一条记录的例子,下面是重点代码提示:第三部分讲解DataTable的创建以及数据的填充在这一部分给学生明确学习目的,主要学习如何用代码创建一个DataTable,以及如何向DataTable内添加数据。
DataSet及DataTable⽤法详解DataSet是开发⼈员为⽅便数据处理开发出来的,是数据的集合,是为解决DataReader的缺陷设计的,DataReader数据处理速度快,但它是只读的, ⽽且⼀旦移到下⼀⾏,就不能查看上⼀⾏的数据,DataSet则可以⾃由移动指针。
DataSet的数据是与数据库断开的。
DataSet还可⽤于多层应⽤程序中,如果应⽤程序运⾏在中间层的业务对象中来访问数据库,则业务对象需将脱机数据结构传递给客户应⽤程序。
DataSet的功能:浏览、排序、搜索、过滤、处理分级数据、缓存更改等。
还可以与XML数据互换。
DataSet中可包括多个DataTable,可将多个查询结构存到⼀个DataSet中,⽅便操作,⽽DataTable中⼜包括多个DataRow、DataColumn,可通过这些DataRow、DataColumn来查看、操作其中的数据,⽽需将操作结果返回给数据库的话,则可以调⽤DataAdapter的 Update⽅法。
DataSet的操作:DataSet ds=new DataSet();DataTable dt=new DataTable("newTable");ds.Tables.Add(dt);DataSet ds=new DataSet();DataTable dt=ds.Tables.Add("newTable");上述两种⽅法都可以在DataSet中添加⼀个DataTable,看需要⽽进⾏选择。
添加DataTable后,需向其中添加⾏和列。
DataSet ds=new DataSet();DataTable dt=ds.Tables.Add("newTables");DataColumn col=dt.Columns.Add("newColumn",typeof(int));col.AllowDBNull=false;col.MaxLength=4;col.Unique=true;上述代码向DataSet中的DataTable中添加名为”newColumn”,类型为int且不为空,最⼤长度为4和唯⼀性为真的列。
一、存储的对比DataReader从数据库中检索【只读】数据流,存在客户端网络缓冲区,直到Read方法访问它们。
DataAdapter表示一组SQL命令和数据库连接,用于填充DateSet和【更新】数据源DataSet存在内存中的数据缓存,可包含多个DataTableDataTable内存中的数据表二、优缺点三、搭配使用DataReader与SqlCommand搭配使用。
可向DataTable里存入数据。
DataAdapter与DataSet搭配使用。
DataSet可再存入DataTable。
四、最简单实例// DataReader//设连接有效,数据不为空SqlCommand command = new SqlCommand("SELECT id FROM dbo.bu", connection); connection.Open();SqlDataReader reader = command.ExecuteReader();while (reader.Read()){Console.WriteLine(reader.GetInt32(0)); }reader.Close();// DataAdapterDataSet//设连接有效,数据不为空SqlDataAdapter adapter = new SqlDataAdapter("SELECT id FROM dbo.bu ", connection); DataSet customers = new DataSet();adapter.Fill(customers,"bu");。
DataSet与DataTable对象DataSet对象DataSet是中最核心的成员之一,是各种基于.NET平台程序语言(如、C#.NET、C++.NET)的数据库应用程序开发最常接触的类,这是因为DataSet在 实现从数据库中抽取数据的作用。
数据抽取后,DataSet就是数据的存放地,它是各种数据源(SQL Server 、OLE DB等)的数据在计算机内存的缓存,所以有时说DataSet可以看成是一个数据容器(又称数据集)。
在客户端通过对DataSet的数据集读取、更新等操作,从而实现对数据源的同等操作。
DataSet的最大优点是离线(断开)和连接。
DataSet既可以以离线方式,也可以以实时连接方式来操作数据库中的数据。
这样的好处是大大减少了服务器端数据库的连接线程,从而大大地减少了服务器端的运行压力。
所以,在数据量不大的情况下,使用DataSet是最好的选择。
DataSet的基本工作过程:应用程序一般并不直接对数据库进行操作(直接在程序中调用存储过程等除外),而是先完成和数据库的连接,接着通过数据适配器(DataAdapter)把数据库中的数据填入DataSet对象,然后客户端再通过读取DataSet来获得需要的数据,同样,在更新数据库中的数据时,也是首先更新DataSet,然后再通过DataSet和数据适配器将更新的数据同步地解释入数据库中。
DataSet中的几个重要对象:TablesCollection对象:DataSet 里的表用DataTable来表示,一个DataSet里面可以包含多个DataTable,这些DataTable就构成了TablesCollection对象。
每个DataTable中都包含一个ColumnsColleciton和一个RowsCollection对象。
RelationsCollection对象:各个DataTable之间的关系通过DataRelation来表达,这些DataRelation构成的集合就是RelationsCollection对象。
1、DataView是DataTable的表示,DataTable表里的记录是没有顺序的,但显示可以有不同顺序(DataVIew),但还是同一张表,所以一个DataTable可以有多个DataView,默认访问DataTable,其实是访问他的DefaultView。
DataSet则是DataTable的集合,也可以有不止一个DataTable2、DataView 是一张DataTable的虚拟视图,主要用来显示数据的,其实数据的更改都是发生在DataTable中。
如果以数据库来打比方,DataSet就是一个功能简单的数据库,是多个表(DataTable)的集合,DataTable就是对应数据库中的表,而DataView则对应数据库中的视图(View)。
中有一层对象,用来创建任意数据源的抽象模型。
其中包括DataSet,DataTable,DataRow,DataView,DataRelation等等。
所有这些对象都定义在System.Data名字空间。
它们形成一个抽象模型,使得无论针对Windows Form,Web Form还是Web Service进行编程,都可以使用相同的编程接口。
在实际应用中,这些对象大多会对诸如SQL Server一类的关系型数据库中的数据进行操作。
但是,它们可以处理各种数据,而不管它的物理存储媒介。
你可以使用DataSet对象来打包和关联各表中的数据,用DataTable类来处理表格类型的数据,而DataRow对象可以处理表中某一行的数据。
这三个对象都是对数据进行打包,但有不同的逻辑聚合层次。
DataSet是DataTable和其他的组合。
而DataTable是DataRow和其他的组合。
DataRow是字段和其他的组合。
但是这些对象中都没有内建过滤和排序的功能。
提供了一些类来处理这个数据库应用程序中的重要方面。
在.Net Beta2中,这方面最重要的两个对象就是DataView和DataViewManager。