1、单击此处编辑母版标题样式,2015/2/5,#,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,6,章,ADO.NET,DataSet,和适配器,回顾,.NET framework,中的,ADO.NET,是一组类,允许应用程序与数据库交互,以便检索和更新信息,每种,.NET,数据提供程序都是由以下四个对象组成:,Connection,,,Command,,,DataAdapter,以及,DataReader,Connection,对象用于在应用程序和数据库之间建立连接,Command,对象允许向数据库传递请求、检索和操纵数据库中的数据,本章目标,掌握记录集,(DataSet),
2、对象的结构,定义,DataTable,对象,定义,DataRow,和,DataColumn,对象,数据适配器,(DataAdapter),对象,用,DataGridView,控件查看数据,使用,DataReader,快速访问数据,怎样快速读取数据库的数据?,对于要求快速访问数据显示在界面上的应用程序,数据读取器,DataReader,是一个较好的选择,应用程序,徐礼应,美国硅谷,,优秀,徐礼应,姓名:,学校:,美国硅谷,成绩:,优秀,DataReader,使用,DataReader,对象,数 据 库,认识,DataReader,对象,每次读取一行数据,命名空间,对应的,DataReader,对
3、象,System.Data.SqlClient,SqlDataReader,System.Data.OleDb,OleDbDataReader,System.Data.Odbc,OdbcDataReader,System.Data.OracleClient,OracleDataReader,DataReader,的主要属性和方法,属性,说明,FieldCount,返回当前行中的列数,方法,说明,Read,前进到下一行记录,Close,关闭,DataReader,对象,DataReader,使用步骤,使用,DataReader,检索数据的步骤:,1,、创建,Command,对象,2,、调用,Ex
4、ecuteReader(),创建,DataReader,对象,3,、使用,DataReader,的,Read(),方法逐行读取数据,4,、读取某列的数据,,(type)dataReader,5,、关闭,DataReader,对象,获取某列的值:,方法一:指定列的索引,从,0,开始,方法二:指定列名,注意:,DataReader,使用后必须关闭,使用,DataReader,示例,2-1,private void btnDis_Click(object sender,EventArgs e),string strsql=select*from StuInfo;,/,初始化命令对象,sqlCmd=n
5、ew SqlCommand();,sqlCmd.CommandText=strsql;,sqlCmd.CommandType=CommandType.Text;,sqlCmd.Connection=sqlCon;,/,执行操作,try,/,打开连接,sqlCon.Open();,/,执行操作 返回,sqlRead=sqlCmd.ExecuteReader();,下一页,使用,DataReader,示例,2-2,/,遍历所有信息 添加到列表控件中,while(sqlRead.Read(),string strInfo=;,for(int i=0;i sqlRead.FieldCount;i+),
6、strInfo+=t+sqlRead.GetValue(i)+t;,lstInfo.Items.Add(strInfo);,catch(Exception ex),MessageBox.Show(ex.Message);,finally,sqlCon.Close();,为什么使用,DataSet,对象,应用程序,大量的数据,来自多个数据源,大批量的查询、修改数据怎么办?,想在断开数据库连接的情况下操所数据怎么办?,使用,DataSet,对象,DataSet,数 据 库,了解,DataSet,对象,DataSet,数据集,简单理解为一个临时数据库,将数据源的数据保存在内存中,独立于任何数据库,工
7、厂的仓库,车间的,临时仓库,生产线,数据源,DataSet,应用程序,驻留于内存,,临时存储数据,类似的关系,DataSet,的层次结构,2-1,DataSet,的基本结构,DataSet,DataTable,DataColumnCollection,DataRowCollection,DataColumn,DataRow,DataTableCollection,数据集,数据表的集合,数据表,数据列的集合,数据行的集合,数据列,数据行,DataSet,的层次结构,2-2,GradeTable,ClassTable,StudentTable,id,name,class,sex,1,小菲,5,女,
8、2,小薇,3,女,3,小强,6,男,DataTableCollection,数据表集合,DataTable,数据表,DataRowCollection,数据行集合,DataRow,数据行,DataColumnCollection,数据列集合,DataColumn,数据列,DataSet,工作流程,数据集,发送数据,修改数据集,传递数据,提交修改后的数据,请求数据,客户端,使用,C#,代码创建数据集,创建一个,DataSet,可以指定一个数据集的名称,如果不指定名称,则默认被设为,NewDataSet,DataSet dataSet=new DataSet();,DataSet dataSet=
9、new DataSet(MySchool);,DataSet,数据集对象,=,new,DataSet(,数据集的名称字符串,);,DataTable,、,DataColumn,和,DataRow 3-1,数据集中的数据以,DataTable,对象的形式存储,DataTable,类属于,System.Data,命名空间,属性,说明,Columns,表示列的集合或,DataTable,包含的,DataColumn,Constraints,表示特定,DataTable,的约束集合,DataSet,表示,DataTable,所属的数据集,PrimaryKey,表示作为,DataTable,主键的字段或
10、DataColumn,Rows,表示行的集合或,DataTable,包含的,DataRow,HasChanges,返回一个布尔值,指示数据集是否更改了,方法,说明,AcceptChanges,提交对该表所做的所有修改,NewRow,添加新的,DataRow,事件,说明,ColumnChanged,修改该列中的值时激发该事件,RowChanged,成功编辑行后激发该事件,RowDeleted,成功删除行时激发该事件,DataTable objStudentTable=new DataTable(Students);,创建,DataTable,对象的实例,DataSet studentDS=ne
11、w DataSet();,DataTable objStudentTable=studentDS.Tables.Add(Students);,创建,DataTable,的实例,然后将其添加到数据集的,Tables,集合中,DataTable,、,DataColumn,和,DataRow,3-2,DataColumn,对象定义,DataTable,的列,DataTable,的,Columns,属性含有对,DataColumn,对象的引用,属性,说明,AllowDBNull,表示一个值,指示对于该表中的行,此列是否允许,null,值,ColumnName,表示指定,DataColumn,的名称,D
12、ataType,表示指定,DataColumn,对象中存储的数据类型,DefaultValue,表示新建行时该列的默认值,Table,表示,DataColumn,所属的,DataTable,的名称,Unique,表示,DataColumn,的值是否必须是唯一的,DataTable objStudentTable=new DataTable(Students);,DataColumn objStudentNumber=objStudentTable.Columns.Add,(StudentNo,typeof(Int32);,objStudentNumber.AllowDBNull=false;,
13、objStudentNumber.DefaultValue=25;,objStudentTable.Columns.Add(StudentName,typeof(Int32);,objStudentTable.Columns.Add(StudentMarks,typeof(Double);,使用多个,DataColumn,对象创建,DataTable,DataTable,、,DataColumn,和,DataRow,3-3,DataRow,对象表示,DataTable,中的实际数据,属性,说明,Item,表示,DataRow,的指定列中存储的值,RowState,表示行的当前状态,Table,
14、表示用于创建,DataRow,的,DataTable,的名称,方法,说明,AcceptChanges,用于提交自上次调用了,AcceptChanges,之后对该行所做的所有修改,Delete,Deletes the DataRow,用于删除,DataRow,RejectChanges,用于拒绝自上次调用了,AcceptChanges,之后对,DataRow,所做的所有修改,/,定义表结构,为,Students,表添加学号、姓名、分数三列,DataTable objStudentTable=new DataTable(Students);,DataColumn objStudentNumber=
15、new DataColumn();,objStudentNumber.DataType=objStudentTable.Columns.Add,(StudentNo,typeof(string);,objStudentNumber.AllowDBNull=false;,objStudentNumber.DefaultValue=25;,objStudentTable.Columns.Add(StudentName,typeof(string);,objStudentTable.Columns.Add(StudentMarks,typeof(Double);,/,向表中填充数据,DataRow
16、objStudentRow;,objStudentRow=objStudentTable.NewRow();,objStudentRowStudentNo=101;,objStudentRow“StudentName,”=“,张三,;,objStudentRowStudentMarks=55;,objStudentTable.Rows.Add(objStudentRow);,在,DataTable,对象中新建,DataRow,DataSet,常用属性和方法,数据集的名称是可选的,不需要指定,如果没有指定名称,则以默认名称,NewDataSet,创建数据集,属性,说明,DataSetName,用
17、于获取或设置当前数据集的名称,Tables,用于检索数据集中包含的表集合,方法,说明,Clear,清除数据集中包含的所有表的所有行,HasChanges,返回一个布尔值,指示数据集是否更改了,DataSet empDS=new DataSet(EmployeeDetails);,添加主键约束,表中的主键用于对记录进行唯一标识,DataTable,的,PrimaryKey,属性接受含有一个或多个,DataColumn,对象的数组,objStudentTable.PrimaryKey=new,DataColumnobjStudentTable.ColumnsStudentNo;,设置单个列为,Da
18、taTable,的主键,objStudentTable.PrimaryKey=new DataColumn,objStudentTable.ColumnsStudentNo,objStudentTable.ColumnsStudentName,;,为,DataTable,对象设置复合主键,为什么需要,DataAdapter,如何将数据库的数据放在,DataSet,中?,DataSet,数据集,DataAdapter,数据库,DataSet,数据集,Connection,数据库连接,DataAdapter,数据适配器,数 据 库,DataAdapter,对象,不同命名空间的,DataAdapte
19、r,对象,命名空间,对应的,DataAdapter,对象,System.Data.SqlClient,SqlDataAdapter,System.Data.OleDb,OleDbDataAdapter,System.Data.Odbc,OdbcDataAdapter,System.Data.OracleClient,OracleDataAdapter,如何填充数据集,使用,DataAdapter,对象填充数据集,DataSet,数据集,使用,Fill,(),方法,填充 DataSet 中的表,使用,Connection,连接数据源,Connection,数 据 库,DataAdapter,的,
20、Fill(),方法,填充数据集步骤,SqlDataAdapter,对象名,=,new,SqlDataAdapter(,查询用,sql,语句,数据库连接,);,创建,SqlDataAdapter,对象,1,DataAdapter,对象,.Fill(,数据集对象,数据表名称字符串,);,填充,DataSet,2,DataAdapter,总结,DataAdapter,的主要属性和方法,属性,说明,SelectCommand,从数据库检索数据的,Command,对象,方法,说明,Fill,向,DataSet,中的表填充数据,Update,将,DataSet,中的数据提交到数据库,总结,DataReader,对象提供只读和连接式数据访问,并要求使用专用的数据连接。,DataReader,对象提供检索强类型化数据的方法。,在,DataSet,对象内表示的数据是数据库的部分或全部的断开式副本。,DataTable,表示一个数据表,而,DataColumn,表示,DataTable,中列的结构。,通过定义,DataRow,对象向,DataTable,对象添加数据行。,DataAdapter,对象用来填充数据集和用更新集到数据库,这样方便了数据库和数据集之间的交互。,






