第十六讲 DataSet对象教学目的:
一、复习 DataAdapter对象的主要内容。
二、掌握 DataSet对象的主要内容。
三、掌握离线数据操作的主要方法。
教学重点:
一,DataSet对象的属性和方法。
二,DataSet对象和 DataReader对象的选取三、离线数据操作。
一,DataSet对象概述
ADO.NET是,NET FrameWork SDK中用以操作数据库的类库的总称。而 DataSet类则是
ADO.NET中最核心的成员,也是各种开发基于,NET平台程序语言开发数据库应用程序最常接触的类。
★★ 之所以 DataSet类在 ADO.NET中具有特殊的地位,是因为 DataSet在 ADO.NET实现从数据库抽取数据中起到关键作用,在从数据库完成数据抽取后,DataSet就是数据的存放地,它是各种数据源中的数据在计算机内存中映射成的缓存,所以有时说
DataSet可以看成是一个数据容器。同时它在客户端实现读取、更新数据库等过程中起到了中间部件的作用 ( DataReader只能检索数据库中的数据)。
二,DataSet对象的主要特性:
1,独立性。 DataSet独立于各种数据源。考虑到各种数据源的多样性、复杂性。
在,Net中,无论什么类型数据源,它都会提供一致的关系编程模型,而这就是
DataSet。
2,离线(断开)和连接。 DataSet既可以以离线方式,也可以以实时连接来操作数据库中的数据。
3,DataSet对象是一个可以用 XML形式表示的数据视图,是一种数据关系视图。
三,DataSet对象的结构模型每一个 DataSet往往是一个或多个
DataTable 对象的集合,这些对象由数据行和数据列以及主键、外键、约束和有关
DataTable对象中数据的关系信息组成。
DataSet对象的具体结构见下图:
在上图的基础上,DataSet对象在实际数据表的映射为:
补充,DataTable,DataColumn和 DataRow
1,DataTable对象
DataTable对象表示数据集中的一个表。其主要属性和方法如下:
1) Columns:数据表中所有字段的集合。
2) PrimaryKey:获取或设置数据表的主键。
3) Rows:数据表中所有行的集合。
4) TableName:获取或设置表的名字。
5) DefaultView:获取与数据表相关联的 DataView
对象。 DataView对象相当于数据库中的视图。
6) NewRow():创建一个和当前表有相同字段结构的数据行。
2,DataColumn对象
DataColumn对象表示数据集中的一个字段。其主要属性和方法如下:
1) Count:获取数据表中包含的字段个数。
2) Caption:获取或设置字段的标题。如果未指定字段标题则字段标题就是字段名。
3) ColumnName:获取或设置字段名。
4) DateType:获取或设置字段的数据类型。
5) DefaultValue:获取或设置新增数据行时字段的默认值。
3,DataRow对象
1) add():将一个行添加到当前表中。
2) Count:获取表中的行的数量。
(1)数据表 (DataTable)
DataTable dt = ds.数据表名 ;
其中,dt代表数据表对象; ds代表数据集对象。
(2)数据行 (DataRow)
DataRow dr = dt.Rows[n];
其中:
DataRow代表数据行类;
dr是数据行对象;
dt代表数据表对象 ;
n代表行的序号 (序号从 0开始 )。
(3)数据列 (DataColumn)
string dc = dr.Columns["字段名
"].ToString();
或者
string dc =
dr.Column[index].ToString();
综合前面的语句,若想取出数据表 (dt)中第 3条记录中的“姓名”字段,并将该字段的值放入一输入框 (textBox1)中时,语句可以写成:
DataTable dt = ds.Customers
// 从数据集中提取数据表
DataRow dRow = dt.Rows[2 ];
// 从数据表提取行
string
textBox1.Text=dRow["CompanyName"].ToString
(); // 从行中取出字段的值语句执行的结果是:从 Customers数据表的第 3条记录中,取出字段名为 CompanyName的值,并赋给 textBox1.Text。
四,DataSet 对象的使用方法
DataSet使用方法一般有三种:
1,把数据库中的数据通过 DataAdapter对象填充 DataSet。
2,通过 DataAdapter对象操作 DataSet实现更新数据库。
3,把 XML数据流或文本加载到 DataSet。
下面就分别对这三种方法进行进一步的说明:
1,把数据库中的数据通过 DataAdapter对象填充 DataSet:
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方法填充 DataSet
sqlConnection.Close ( ) ;
//关闭数据连接
2,通过 DataAdapter对象操作 DataSet实现更新数据库:
SqlCommandBuilder sqlCommandBuilder1 =
new SqlCommandBuilder ( sqlDataAdapter1 ) ;
//以 sqlDataAdapter1为参数来初始化
SqlCommandBuilder实例
dsDataSet1.Tables["Customers"].Rows[0].Delet
e ( ) ;
//删除 DataSet中删除数据表 Customers中第一行数据
sqlDataAdapter1.Update
( dsDataSet1,"Customers" ) ;
//调用 Update方法,以 DataSet中的数据更新从数据库
dsDataSet1.Tables["Customers"].AcceptChang
es ( ) ;
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开发语言开发数据库应用程序最需要掌握的基本的知识之一。
数据绑定分成二类,简单型数据绑定 和 复杂型数据绑定。 适用于简单型数据绑定组件一般有
Lable,TextBox等,适用于复杂性数据绑定的组件一般有 GridView,ListBox,ComboBox等。其实简单型数据绑定和复杂性数据绑定并没有明确的区分,只是在组件进行数据绑定时,一些结构复杂一点的组件在数据绑定时操作步骤相近,而另外一些结构简单一点的组件在数据绑定时也比较类似。于是也就产生了二个类别。以下就结合
TextBox组件和 GridView组件分别探讨 DataSet在实现简单型数据绑定和复杂性数据绑定作用和具体实现方法。
1、简单型数据绑定:
简单型数据绑定一般使用这些组件中的
DataBindings属性 的 Add方法 把 DataSet中某一个 DataTable中的某一行和组件的某个属性绑定起来,从而达到显示数据的效果。具体操作:
textBox1.DataBindings.Add ( "Text",
dsDataSet1," Customers,CustomerID
" ) ;
2,复杂性数据绑定:
复杂性数据绑定一般是设定组件的 DataSource属性和 DisplayMember属性来完成数据绑定的。
DataSource属性值一般设定为要绑定的 DataSet,
DisplayMember属性值一般设定为要绑定的数据表或数据表中的某一列。具体操作:
GridView1.DataSource = ds;
GridView1.DataBind();
其中 ds是一 DataSet类型的数据源,也可使用
GridView1.DataSourceID = SqlDataSource 1;
GridView1.DataBind();
六,DataReader类与 DataSet类的区别
1,DataReader是数据管理提供者类,而 DataSet是一般性数据库类
2,DataSet获取数据需要通过 DataAdapter的填充,
而 DataReader本身就是管理提供者,它可以通过
Command的 ExecuteReader()方法获取数
3,DataReader是在线处理,当连接关闭后就不能读取数据,DataSet可以离线处理数据,
它是把数据从数据库拷贝到本地存储,在关闭连接的情况下仍然可以在 DataSet中处理数据,甚至可以在本地存储的表格中增加限制。
4,DataReader只能下身读取数据,但不能修改数据; DataSet可以按任意顺序读取行,
可以按灵活的方式搜索,排序和过滤这些行,甚至可以改变这些行,然后将这些改变同步到数据库中。
5、从 DataReader读取数据的速度快于 DataSet。
6、由于 DataSet是离线处理,所以当在事务处理中要锁定数据库时,不可以使用 DataSet。国为当 DataSet被填充后,会自动断开与数据库的连接,此时不可能再对数据库进行锁定。
7,DataSet和 DataReader与数据源之间的关系。
前者是单向循环的,后者是双向循环的。
8,最一个重要区别是一个是在线处理,一个是离线处理。
总结:通常情况下,两者之间可以相互替代,特定要求时这就要决定那种方式合适。
总结:离线处理数据的方式(非连接模式)
连接对象命令对象数据库
XxxConnection
XxxCommand
DataSet
XxxDataAdapter
应用程序使用离线提取数据六步曲,
1)建立连接
2)建立命令
3)建立数据适配器
4)建立数据集
5)填充数据集
6)读数据
一、复习 DataAdapter对象的主要内容。
二、掌握 DataSet对象的主要内容。
三、掌握离线数据操作的主要方法。
教学重点:
一,DataSet对象的属性和方法。
二,DataSet对象和 DataReader对象的选取三、离线数据操作。
一,DataSet对象概述
ADO.NET是,NET FrameWork SDK中用以操作数据库的类库的总称。而 DataSet类则是
ADO.NET中最核心的成员,也是各种开发基于,NET平台程序语言开发数据库应用程序最常接触的类。
★★ 之所以 DataSet类在 ADO.NET中具有特殊的地位,是因为 DataSet在 ADO.NET实现从数据库抽取数据中起到关键作用,在从数据库完成数据抽取后,DataSet就是数据的存放地,它是各种数据源中的数据在计算机内存中映射成的缓存,所以有时说
DataSet可以看成是一个数据容器。同时它在客户端实现读取、更新数据库等过程中起到了中间部件的作用 ( DataReader只能检索数据库中的数据)。
二,DataSet对象的主要特性:
1,独立性。 DataSet独立于各种数据源。考虑到各种数据源的多样性、复杂性。
在,Net中,无论什么类型数据源,它都会提供一致的关系编程模型,而这就是
DataSet。
2,离线(断开)和连接。 DataSet既可以以离线方式,也可以以实时连接来操作数据库中的数据。
3,DataSet对象是一个可以用 XML形式表示的数据视图,是一种数据关系视图。
三,DataSet对象的结构模型每一个 DataSet往往是一个或多个
DataTable 对象的集合,这些对象由数据行和数据列以及主键、外键、约束和有关
DataTable对象中数据的关系信息组成。
DataSet对象的具体结构见下图:
在上图的基础上,DataSet对象在实际数据表的映射为:
补充,DataTable,DataColumn和 DataRow
1,DataTable对象
DataTable对象表示数据集中的一个表。其主要属性和方法如下:
1) Columns:数据表中所有字段的集合。
2) PrimaryKey:获取或设置数据表的主键。
3) Rows:数据表中所有行的集合。
4) TableName:获取或设置表的名字。
5) DefaultView:获取与数据表相关联的 DataView
对象。 DataView对象相当于数据库中的视图。
6) NewRow():创建一个和当前表有相同字段结构的数据行。
2,DataColumn对象
DataColumn对象表示数据集中的一个字段。其主要属性和方法如下:
1) Count:获取数据表中包含的字段个数。
2) Caption:获取或设置字段的标题。如果未指定字段标题则字段标题就是字段名。
3) ColumnName:获取或设置字段名。
4) DateType:获取或设置字段的数据类型。
5) DefaultValue:获取或设置新增数据行时字段的默认值。
3,DataRow对象
1) add():将一个行添加到当前表中。
2) Count:获取表中的行的数量。
(1)数据表 (DataTable)
DataTable dt = ds.数据表名 ;
其中,dt代表数据表对象; ds代表数据集对象。
(2)数据行 (DataRow)
DataRow dr = dt.Rows[n];
其中:
DataRow代表数据行类;
dr是数据行对象;
dt代表数据表对象 ;
n代表行的序号 (序号从 0开始 )。
(3)数据列 (DataColumn)
string dc = dr.Columns["字段名
"].ToString();
或者
string dc =
dr.Column[index].ToString();
综合前面的语句,若想取出数据表 (dt)中第 3条记录中的“姓名”字段,并将该字段的值放入一输入框 (textBox1)中时,语句可以写成:
DataTable dt = ds.Customers
// 从数据集中提取数据表
DataRow dRow = dt.Rows[2 ];
// 从数据表提取行
string
textBox1.Text=dRow["CompanyName"].ToString
(); // 从行中取出字段的值语句执行的结果是:从 Customers数据表的第 3条记录中,取出字段名为 CompanyName的值,并赋给 textBox1.Text。
四,DataSet 对象的使用方法
DataSet使用方法一般有三种:
1,把数据库中的数据通过 DataAdapter对象填充 DataSet。
2,通过 DataAdapter对象操作 DataSet实现更新数据库。
3,把 XML数据流或文本加载到 DataSet。
下面就分别对这三种方法进行进一步的说明:
1,把数据库中的数据通过 DataAdapter对象填充 DataSet:
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方法填充 DataSet
sqlConnection.Close ( ) ;
//关闭数据连接
2,通过 DataAdapter对象操作 DataSet实现更新数据库:
SqlCommandBuilder sqlCommandBuilder1 =
new SqlCommandBuilder ( sqlDataAdapter1 ) ;
//以 sqlDataAdapter1为参数来初始化
SqlCommandBuilder实例
dsDataSet1.Tables["Customers"].Rows[0].Delet
e ( ) ;
//删除 DataSet中删除数据表 Customers中第一行数据
sqlDataAdapter1.Update
( dsDataSet1,"Customers" ) ;
//调用 Update方法,以 DataSet中的数据更新从数据库
dsDataSet1.Tables["Customers"].AcceptChang
es ( ) ;
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开发语言开发数据库应用程序最需要掌握的基本的知识之一。
数据绑定分成二类,简单型数据绑定 和 复杂型数据绑定。 适用于简单型数据绑定组件一般有
Lable,TextBox等,适用于复杂性数据绑定的组件一般有 GridView,ListBox,ComboBox等。其实简单型数据绑定和复杂性数据绑定并没有明确的区分,只是在组件进行数据绑定时,一些结构复杂一点的组件在数据绑定时操作步骤相近,而另外一些结构简单一点的组件在数据绑定时也比较类似。于是也就产生了二个类别。以下就结合
TextBox组件和 GridView组件分别探讨 DataSet在实现简单型数据绑定和复杂性数据绑定作用和具体实现方法。
1、简单型数据绑定:
简单型数据绑定一般使用这些组件中的
DataBindings属性 的 Add方法 把 DataSet中某一个 DataTable中的某一行和组件的某个属性绑定起来,从而达到显示数据的效果。具体操作:
textBox1.DataBindings.Add ( "Text",
dsDataSet1," Customers,CustomerID
" ) ;
2,复杂性数据绑定:
复杂性数据绑定一般是设定组件的 DataSource属性和 DisplayMember属性来完成数据绑定的。
DataSource属性值一般设定为要绑定的 DataSet,
DisplayMember属性值一般设定为要绑定的数据表或数据表中的某一列。具体操作:
GridView1.DataSource = ds;
GridView1.DataBind();
其中 ds是一 DataSet类型的数据源,也可使用
GridView1.DataSourceID = SqlDataSource 1;
GridView1.DataBind();
六,DataReader类与 DataSet类的区别
1,DataReader是数据管理提供者类,而 DataSet是一般性数据库类
2,DataSet获取数据需要通过 DataAdapter的填充,
而 DataReader本身就是管理提供者,它可以通过
Command的 ExecuteReader()方法获取数
3,DataReader是在线处理,当连接关闭后就不能读取数据,DataSet可以离线处理数据,
它是把数据从数据库拷贝到本地存储,在关闭连接的情况下仍然可以在 DataSet中处理数据,甚至可以在本地存储的表格中增加限制。
4,DataReader只能下身读取数据,但不能修改数据; DataSet可以按任意顺序读取行,
可以按灵活的方式搜索,排序和过滤这些行,甚至可以改变这些行,然后将这些改变同步到数据库中。
5、从 DataReader读取数据的速度快于 DataSet。
6、由于 DataSet是离线处理,所以当在事务处理中要锁定数据库时,不可以使用 DataSet。国为当 DataSet被填充后,会自动断开与数据库的连接,此时不可能再对数据库进行锁定。
7,DataSet和 DataReader与数据源之间的关系。
前者是单向循环的,后者是双向循环的。
8,最一个重要区别是一个是在线处理,一个是离线处理。
总结:通常情况下,两者之间可以相互替代,特定要求时这就要决定那种方式合适。
总结:离线处理数据的方式(非连接模式)
连接对象命令对象数据库
XxxConnection
XxxCommand
DataSet
XxxDataAdapter
应用程序使用离线提取数据六步曲,
1)建立连接
2)建立命令
3)建立数据适配器
4)建立数据集
5)填充数据集
6)读数据