ADO.NET数据库访问技术案例教程 第6章 浏览数据源中的数据.ppt
-
资源ID:67348183
资源大小:450.50KB
全文页数:162页
- 资源格式: PPT
下载积分:16金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
ADO.NET数据库访问技术案例教程 第6章 浏览数据源中的数据.ppt
第第 6 6 章章浏览数据源中的数据浏览数据源中的数据 使用数据读取器浏览数据源中的数据使用数据读取器浏览数据源中的数据6.1使用数据适配器浏览单个数据表中的数据使用数据适配器浏览单个数据表中的数据 6.2使用数据适配器浏览多个数据表中的数据使用数据适配器浏览多个数据表中的数据6.3 查查 找找 记记 录录6.5数据视图(数据视图(DataViewDataView)的应用)的应用6.4 浏览数据源中的数据浏览数据源中的数据 数据库应用系统中经常以各种方式浏数据库应用系统中经常以各种方式浏览数据源中的数据,览数据源中的数据,ADO.NETADO.NET也提供了多种也提供了多种浏览数据源中的数据的方法。浏览数据源中的数据的方法。【知知识识技技能能目目标标】(1)掌握)掌握SqlCommand对象的对象的ExecuteReader方法。方法。(2)掌握数据读取器)掌握数据读取器SqlDataReader读取数据的方法。读取数据的方法。(3)掌握设置数据命令参数的方法。)掌握设置数据命令参数的方法。(4)掌握浏览多个数据表中的数据)掌握浏览多个数据表中的数据的方法。的方法。(5)掌握使用)掌握使用DataView对象排序数对象排序数据和筛选数据的方法。据和筛选数据的方法。(6)掌握使用)掌握使用Find方法和方法和Select方法方法搜索数据的方法。搜索数据的方法。【本本章章学学习习导导航航】本章探讨浏览数据源中的数据的方法,本章探讨浏览数据源中的数据的方法,主要涉及主要涉及CommandCommand对象、对象、DataReaderDataReader对象和对象和DataAdapterDataAdapter对象,由于涉及的内容较多,对象,由于涉及的内容较多,建议分为三个教学单元,第一个教学单元建议分为三个教学单元,第一个教学单元为为6.16.1和和6.26.2,第二个教学单元为,第二个教学单元为6.36.3和和6.46.4,第三个教学教学为,第三个教学教学为6.56.5。6.16.1使用数据读取器浏览数据源使用数据读取器浏览数据源中的数据中的数据 如果要创建如果要创建SqlDataReaderSqlDataReader对象或者对象或者OleDbDataReaderOleDbDataReader对象,则必须调用对象,则必须调用CommandCommand对象的对象的ExecuteReaderExecuteReader方法,而不方法,而不能直接使用构造函数。能直接使用构造函数。6.1.1创建创建DataReader对象对象创建创建DataReader对象与创建对象与创建DataAdapter对象不同,不能使用对象不同,不能使用New方法方法来创建,而只能通过来创建,而只能通过Command对象的对象的ExecuteReader方法创建。方法创建。例如使用例如使用Comm命令对象创建命令对象创建SqlDataReader对象的代码如下。对象的代码如下。Dimreader1AsSqlDataReaderreader1=comm.ExecuteReader()6.1.2DataReader类的属性类的属性DataReader类的属性如表类的属性如表6-1所示。所示。表表6-16-1DataReaderDataReader类的属性类的属性属属 性性 名名 称称属属 性性 说说 明明FieldCountFieldCount获获取当前行中的列数,默取当前行中的列数,默认值为认值为-1-1。如果所。如果所执执行的行的查查询询并未返回任何并未返回任何记录记录,则该则该属性会返回属性会返回0 0HasRowsHasRows用于判断用于判断SqlDataReaderSqlDataReader对对象是否包含象是否包含记录记录IsClosedIsClosed获获取一个取一个值值,该值该值指示数据指示数据读读取器是否关取器是否关闭闭。如果。如果DataReaderDataReader已关已关闭闭,则则返回返回TrueTrue;否;否则则返回返回FalseFalseItemItem获获取以本机格式取得列的取以本机格式取得列的值值RecordsAffeRecordsAffectedcted获获取取执执行行SQLSQL语语句所插入、修改或句所插入、修改或删删除的行数。如果除的行数。如果没有任何行受到影响或没有任何行受到影响或读读取失取失败败,则则返回返回0 0 当当SqlDataReader关闭后,只能访问关闭后,只能访问IsClosed和和RecordsAffected属性。属性。6.1.3DataReader类的方法类的方法DataReader类的方法如表类的方法如表6-2所示。所示。方方 法法 名名 称称方方 法法 说说 明明CloseClose关关闭闭SqlDataReaderSqlDataReader对对象象GetNameGetName获获取指定列的名称取指定列的名称GetOrdinalGetOrdinal在在给给定列名称的情况下定列名称的情况下获获取从零开始的序列号取从零开始的序列号GetSqlValuesGetSqlValues获获取当前行中的所有属性列取当前行中的所有属性列GetStringGetString获获取指定列的字符串形式的取指定列的字符串形式的值值GetTypeGetType获获取当前取当前实实例的数据例的数据类类型型GetDataTypeNameGetDataTypeName将字段序号将字段序号传递给传递给GetDataTypeNameGetDataTypeName方法,可方法,可获获得字段的原始数得字段的原始数据据类类型名称型名称ReadReadDataReaderDataReader的默的默认认位置是在第一条位置是在第一条记录记录之前,要之前,要调调用用ReadRead方法方法前前进进到下一条到下一条记录记录才能开始才能开始访问记录访问记录。如果。如果ReadRead方法能方法能够顺够顺利利地前移到下一条地前移到下一条记录记录,它会返回,它会返回TrueTrue;如果已;如果已经经没有下一条没有下一条记记录录,它会返回,它会返回FalseFalse。它可以自。它可以自动导动导航到数据流中的第一条航到数据流中的第一条记录记录之前的位置,且能自之前的位置,且能自动动向前移向前移动动一条一条记录记录位置位置表表6-26-2DataReaderDataReader类的方法类的方法 GetFieldTypeGetFieldType将字段序号将字段序号传递给传递给GetFieldTypeGetFieldType方法,可方法,可获获得代表得代表对对象的象的类类型型GetValueGetValue获获取以本机格式表示的指定列的取以本机格式表示的指定列的值值GetValuesGetValues获获取当前行集合中的所有属性列取当前行集合中的所有属性列IsDBNullIsDBNull获获取一个取一个值值,该值该值指示列中是否包含不存在的或缺少的指示列中是否包含不存在的或缺少的值值。如果指定的列如果指定的列值值与与DBNullDBNull等效,等效,则则返回返回TrueTrue;否;否则则返回返回FalseFalseNextResultNextResult当当读读取批取批处处理理SQLSQL语语句的句的结结果果时时,使数据,使数据读读取器前取器前进进到下到下一个一个结结果。默果。默认认情况下,数据情况下,数据读读取器定位在第一取器定位在第一项结项结果上果上 6.1.4实例说明实例说明【实例实例6-1】1设计任务设计任务设计一个窗体,用于浏览选定班级的设计一个窗体,用于浏览选定班级的班级信息和该班对应的学生信息,其运行班级信息和该班对应的学生信息,其运行效果如图效果如图6-1所示,在所示,在“班级编号班级编号”对应的对应的组合框中选择一个班级编号,文本框中会组合框中选择一个班级编号,文本框中会显示对应班级的显示对应班级的“班级名称班级名称”和和“班级编班级编号号”,同时列表框中会显示对应班级的学,同时列表框中会显示对应班级的学生信息。生信息。图图6-16-1使用数据读取器浏览数据源中的数据使用数据读取器浏览数据源中的数据 2设计过程设计过程(1)新建一个项目)新建一个项目Chapter6_1。(2)在窗体中添加)在窗体中添加1个个ComboBox控控件、件、2个个TextBox控件、控件、1个个ListBox控控件和多个件和多个Label控件,窗体及控件的控件,窗体及控件的设计外观如图设计外观如图6-2所示。所示。图图6-26-2窗体的设计状态窗体的设计状态 (3)切换到代码窗口,编写程序代)切换到代码窗口,编写程序代码,实现其功能。码,实现其功能。窗体级对象变量的定义如代码窗体级对象变量的定义如代码6-1-1所所示。示。代代码码6-1-16-1-10101020203030404Dim Dim connconn As New As New SqlConnectionSqlConnection(Server=(local);(Server=(local);Database=Database=JWInfoJWInfo;&_;&_ Integrated Security=SSPI)Integrated Security=SSPI)Dim Dim commcomm As New As New SqlCommandSqlCommandDim reader1 As Dim reader1 As SqlDataReaderSqlDataReader 窗体窗体Load事件的程序代码如代码事件的程序代码如代码6-1-2所示。所示。ComboBox控件的控件的SelectedIndexChanged事件的程序代码如事件的程序代码如代码代码6-1-3所示。所示。3代码分析代码分析(1)代码)代码6-1-1定义了定义了SqlConnection连接对象、连接对象、SqlCommand数据命令对数据命令对象和象和SqlDataReader数据读取器对象。数据读取器对象。由于这三个对象变量是在所有事件过由于这三个对象变量是在所有事件过程的外部定义的,所以整个窗体的所程的外部定义的,所以整个窗体的所有过程都可以访问。有过程都可以访问。(2)代码)代码6-1-2实现了将实现了将“班级编号班级编号”字段的数据内容填充到字段的数据内容填充到ComboBox控件中供用户选择。控件中供用户选择。(3)代码)代码6-1-3主要实现了以下功能:主要实现了以下功能:当用户从组合框当用户从组合框ComboBox1中选择中选择某一个班级编号时,程序执行数据命某一个班级编号时,程序执行数据命令以便从数据表中提取出该班级编号令以便从数据表中提取出该班级编号对应的班级数据和学生数据,然后将对应的班级数据和学生数据,然后将各个字段的内容赋给窗体上的相应控各个字段的内容赋给窗体上的相应控件。件。(4)代码)代码6-1-3中同一个中同一个SqlCommand对象先后执行了两条不对象先后执行了两条不同的同的SQL语句,第语句,第09、10两行对应的两行对应的SQL语句用于从数据库的语句用于从数据库的“班级班级”表表中读取数据。数据读取完毕后必须关中读取数据。数据读取完毕后必须关闭数据读取器,否则第二次调用闭数据读取器,否则第二次调用SqlCommand对象的对象的ExecuteReader方法时会出现错误。第方法时会出现错误。第20、21两行对两行对应的应的SQL语句用于从数据库的语句用于从数据库的“学生学生信息信息”表中读取数据。表中读取数据。(5)代码)代码6-1-3中的第中的第14、15行两条行两条语句用于将返回数据记录的特定字段语句用于将返回数据记录的特定字段的内容赋给相应的文本框,第的内容赋给相应的文本框,第28、29行对应的语句用于将行对应的语句用于将“学生信息学生信息”表表中选定班级的学生数据显示在中选定班级的学生数据显示在ListBox控件中。控件中。4知识要点说明知识要点说明本节使用数据读取器从数据表中提取本节使用数据读取器从数据表中提取数据,使用数据读取器能够有效地提高应数据,使用数据读取器能够有效地提高应用程序的性能,主要原因是:用程序的性能,主要原因是:(1)可以在使用数据时即时提取数)可以在使用数据时即时提取数据,而不必等待查询的整个结果返回;据,而不必等待查询的整个结果返回;(2)默认一次只能在内存中保存一)默认一次只能在内存中保存一条数据记录,降低了系统的负荷。条数据记录,降低了系统的负荷。6.26.2使用数据适配器浏览单个数使用数据适配器浏览单个数据表中的数据据表中的数据6.2.1创建创建DataAdapter对象对象可以利用可以利用“工具箱工具箱”中的中的DataAdapter组件创建,也可以编写程序代码创建。组件创建,也可以编写程序代码创建。VisualStudio.NET中提供了中提供了SqlDataAdapter和和OleDbDataAdapter等多等多种类用于分别创建相应的种类用于分别创建相应的DataAdapter对象。对象。1创建创建SqlDataAdapter对象对象 语法格式如下。语法格式如下。Dim Dim 对象名对象名 As New As New SqlDataAdapterSqlDataAdapter 2创建创建OleDbDataAdapter对象对象语法格式如下。语法格式如下。Dim对象名对象名AsNewOleDbDataAdapter 3SqlDataAdapter构造函数的重构造函数的重载形式载形式SqlDataAdapter类或类或OleDbDataAdapter类有四种重载形式,类有四种重载形式,SqlDataAdapter构造函数的重载形式如下。构造函数的重载形式如下。(1)SqlDataAdapter()(2)SqlDataAdapter(ByValselectCommandAsSqlCommand)(3)SqlDataAdapter(ByValselectCommandTextAsString,_ByValselectConnectionAsSqlConnection)(4)SqlDataAdapter(ByValselectCommandTextAsString,_ByValselectConnectionStringAsString)数据访问最主要的操作是查询、插入、数据访问最主要的操作是查询、插入、删除和更新四种,删除和更新四种,DataAdapter对象提供了对象提供了四个属性与这四种操作相对应,设置了这四个属性与这四种操作相对应,设置了这四个属性后,四个属性后,DataAdapter对象就知道如何对象就知道如何从数据库获得所需的数据,可以是新增记从数据库获得所需的数据,可以是新增记录或者删除记录,也可以是更新数据源。录或者删除记录,也可以是更新数据源。四种属性如表四种属性如表6-3所示。所示。属属 性性 名名 称称属属 性性 说说 明明SelectCommandSelectCommand设设置或置或获获取从数据取从数据库库中中选择选择数据的数据的SQLSQL语语句或存句或存储过储过程程InsertCommandInsertCommand设设置或置或获获取向数据取向数据库库中插入新中插入新记录记录的的SQLSQL语语句或存句或存储过储过程程DeleteCommandDeleteCommand设设置或置或获获取数据取数据库库中中删删除除记录记录的的SQLSQL语语句或存句或存储过储过程程UpdateCommandUpdateCommand设设置或置或获获取更新数据源中取更新数据源中记录记录的的SQLSQL语语句或存句或存储过储过程程TableMappingsTableMappings获获取一个集合,它提供数据源表和取一个集合,它提供数据源表和DataTableDataTable之之间间的主映射,的主映射,该对该对象决定了数据表中的列与数据源之象决定了数据表中的列与数据源之间间的关系。默的关系。默认值认值是一个空集合是一个空集合表表6-36-3 DataAdapterDataAdapter类的常用属性类的常用属性 6.2.3DataAdapter类的主要类的主要方法方法1Fill方法方法Fill方法用于向方法用于向DataSet对象填充从数对象填充从数据源中读取的数据。据源中读取的数据。(1)调用)调用Fill方法的语法格式方法的语法格式 调用调用FillFill方法的语法格式有多种,常方法的语法格式有多种,常见的格式如下。见的格式如下。DataAdapterDataAdapter对象名对象名.Fill.Fill(DataSetDataSet对象名,对象名,数据表名数据表名)其中第一个参数是数据集对象名,表其中第一个参数是数据集对象名,表示要填充的数据集对象;第二个参数是一示要填充的数据集对象;第二个参数是一个字符串,表示本地缓冲区中建立的临时个字符串,表示本地缓冲区中建立的临时表的名称。表的名称。(2)Fill方法的重载版本方法的重载版本Fill方法提供了方法提供了8个重载版本,最常用个重载版本,最常用的有以下的有以下4个重载版本。个重载版本。Fill(ByValds1AsDataSet)AsIntegerFill(ByValds1AsDataSet,ByValsrcTableAsString)AsIntegerFill(ByValds1AsDataSet,ByValstartRecordAsInteger,_ByValmaxRecordsAsInteger,ByValsrcTableAsString)AsIntegerFill(ByValtempTableAsDataTable)AsInteger (3)Fill方法的正确使用方法的正确使用如果调用如果调用Fill()之前连接已关闭,则之前连接已关闭,则先将其打开以检索数据,数据检索完成后先将其打开以检索数据,数据检索完成后再将连接关闭。如果调用再将连接关闭。如果调用Fill()之前连接已之前连接已打开,连接仍然会保持打开状态。打开,连接仍然会保持打开状态。如果数据适配器在填充如果数据适配器在填充DataTable时时遇到重复列,它们将以遇到重复列,它们将以“columnname1”、“columnname2”、“columnname3”这种形式命名后面的列。这种形式命名后面的列。如果传入的数据包含未命名的列,如果传入的数据包含未命名的列,它们将以它们将以“column1”、“column2”的形的形式命名存入式命名存入DataTable。向向DataSet添加多个结果集时,每个添加多个结果集时,每个结果集都放在一个单独的表中。结果集都放在一个单独的表中。可以在同一个可以在同一个DataTable中多次使用中多次使用Fill()方法。如果存在主键,则传入的行会与已方法。如果存在主键,则传入的行会与已有的匹配行合并;如果不存在主键,则传有的匹配行合并;如果不存在主键,则传入的行会追加到入的行会追加到DataTable中。中。2Update方法方法Update方法用于将数据集方法用于将数据集DataSet对象对象中的数据按中的数据按InsertCommand属性、属性、DeleteCommand属性和属性和UpdateCommand属性所指定的要求更新数据源,即调用属性所指定的要求更新数据源,即调用3个个属性中所定义的属性中所定义的SQL语句更新数据源。语句更新数据源。UpdateUpdate方法常见的调用格式如下。方法常见的调用格式如下。DataAdapterDataAdapter对象名对象名.Update.Update(DataSetDataSet对象对象名,名,数据表名数据表名)其中第一个参数是数据集对象名,表其中第一个参数是数据集对象名,表示要将哪个数据集对象中的数据更新到数示要将哪个数据集对象中的数据更新到数据源;第二个参数是一个字符串,表示临据源;第二个参数是一个字符串,表示临时表的名称。时表的名称。DataAdapter对象的对象的Update方法会自方法会自动调用动调用AcceptChanges。6.2.4SqlDataAdapter构造函构造函数和数和Fill方法的应用举例方法的应用举例SqlDataAdapter构造函数的重载形式构造函数的重载形式和和Fill方法的重载形式举例说明如下所示。方法的重载形式举例说明如下所示。01020304ImportsSystem.Data.SqlClientDimconnAsNewSqlConnection(server=(local);database=student;&_integratedsecurity=SSPI)0102030405DimcommAsNewSqlCommand(Select*From班班级级信息信息,conn)DimsqlDaAsNewSqlDataAdapterDimsqlDsAsNewDataSetsqlDa.SelectCommand=commsqlDa.Fill(sqlDs)01020304DimcommAsNewSqlCommand(Select*From班班级级信息信息,conn)DimsqlDaAsNewSqlDataAdapter(comm)DimsqlDsAsNewDataSetsqlDa.Fill(sqlDs,班班级级信息信息)010203DimsqlDaAsNewSqlDataAdapter(Select*From班班级级信息信息,conn)DimsqlDsAsNewDataSetsqlDa.Fill(sqlDs,10,5,班班级级信息信息)0102030405DimsqlDaAsNewSqlDataAdapter(Select*From班班级级信息信息,server=(local);database=student;integratedsecurity=SSPI)DimsqlDsAsNewDataSetDimTempTableAsDataTable=NewDataTable(班班级级信息信息)sqlDa.Fill(TempTable)6.2.5使用数据适配器浏览单使用数据适配器浏览单个数据表中的数据应用举例个数据表中的数据应用举例【实例实例6-2】1设计任务设计任务设计一个窗体,用来浏览设计一个窗体,用来浏览“学生信息学生信息”表中的记录数据,其运行效果如图表中的记录数据,其运行效果如图6-3所所示。示。图图6-36-3使用数据适配器和数据集浏览数据源中数据使用数据适配器和数据集浏览数据源中数据 2设计过程设计过程(1)新建一个项目)新建一个项目Chapter6_2。(2)在窗体中添加一个)在窗体中添加一个DataGrid控控件,窗体及控件的设计外观如图件,窗体及控件的设计外观如图6-4所示。所示。(3)切换到代码窗口,编写程序代)切换到代码窗口,编写程序代码,实现其功能。码,实现其功能。图图6-46-4窗体的设计状态窗体的设计状态 3代码分析代码分析代码分析如表代码分析如表6-4所示。所示。代代 码码 序序 号号行行 号号代代 码码 分分 析析代代码码6-2-16-2-10303行行使用使用SQLSQL语语句和句和SqlConnectionSqlConnection对对象作象作为为参数参数初始化初始化SqlDataAdapterSqlDataAdapter类类的的实实例例0606行行将窗体中的将窗体中的DataGridDataGrid控件与数据集中的表控件与数据集中的表进进行行绑绑定定代代码码6-2-46-2-40202行行直接使用指定的直接使用指定的SelectSelect语语句以及句以及连连接字符串接字符串作作为为构造函数的参数初始化构造函数的参数初始化SqlDataAdapterSqlDataAdapter类类的的实实例例表表6-46-4程序代码分析程序代码分析 代代码码6-2-26-2-20404行行使用使用SqlCommandSqlCommand对对象作象作为为构造函数的参数初构造函数的参数初始化始化SqlDataAdapterSqlDataAdapter类类的的实实例,首先必例,首先必须创须创建建SqlCommandSqlCommand对对象象0707行行设设置置DataGridDataGrid控件的控件的DataSourceDataSource属性属性为为数据数据集中的数据表,也就是将数据表中的数据集中的数据表,也就是将数据表中的数据记记录显录显示在示在DataGridDataGrid控件中控件中代代码码6-2-36-2-30404行行使用无参数的构造函数建立使用无参数的构造函数建立SqlDataAdapterSqlDataAdapter对对象象0606行行将将SelectSelect语语句句赋给赋给SqlDataAdapterSqlDataAdapter对对象的象的SelectCommandSelectCommand属性属性 4知识要点说明知识要点说明(1)SqlDataAdapter对象的对象的Fill方法方法使用使用SelectCommand属性所指定的属性所指定的Select语句或者存储过程从数据源中语句或者存储过程从数据源中提取记录数据,并将所提取的数据记提取记录数据,并将所提取的数据记录填充到数据集对应的表中。录填充到数据集对应的表中。(2)在调用)在调用Fill方法时,相关的连接方法时,相关的连接对象不需要处于打开状态,但是为了对象不需要处于打开状态,但是为了有效控制与数据源的连接、减少连接有效控制与数据源的连接、减少连接打开的时间和有效利用资源,一般应打开的时间和有效利用资源,一般应自行调用连接对象的自行调用连接对象的Open方法来明方法来明确打开连接,调用连接对象的确打开连接,调用连接对象的Close方法来明确关闭连接。方法来明确关闭连接。(3)如果)如果SelectCommand属性的属性的Select语句或者存储过程没有返回任语句或者存储过程没有返回任何记录,则不会在数据集中建立表。何记录,则不会在数据集中建立表。(4)如果)如果SelectCommand属性的属性的Select语句或者存储过程返回多个结语句或者存储过程返回多个结果集,则会将各个结果集的记录分别果集,则会将各个结果集的记录分别存入多个不同的表中,这些表的名称存入多个不同的表中,这些表的名称按顺序分别为按顺序分别为Table、Table1、Table2等。等。6.36.3使用数据适配器浏览多个数使用数据适配器浏览多个数据表中的数据据表中的数据6.3.1使用两个数据适配器浏使用两个数据适配器浏览两个数据表中的数据览两个数据表中的数据一个数据集可以和不限数目的数据适一个数据集可以和不限数目的数据适配器一起配套使用,每一个数据适配器用配器一起配套使用,每一个数据适配器用来填充数据集中的一个或多个数据表。来填充数据集中的一个或多个数据表。【实例实例6-3】1设计任务设计任务设计一个窗体,用来浏览选定班级的设计一个窗体,用来浏览选定班级的班级信息和该班对应的学生信息。移动记班级信息和该班对应的学生信息。移动记录位置,文本框中会显示不同班级的录位置,文本框中会显示不同班级的“班班级编号级编号”和和“班级名称班级名称”,同时,同时DataGrid控件中会显示对应班级的学生信息。窗体控件中会显示对应班级的学生信息。窗体的运行效果如图的运行效果如图6-5所示。所示。图图6-56-5使用两个数据适配器浏览数据表中的数据使用两个数据适配器浏览数据表中的数据 2设计过程设计过程(1)新建一个项目)新建一个项目Chapter6_3。(2)在窗体中添加)在窗体中添加3个个TextBox控件、控件、4个个Button控件、控件、2个个Label控件和控件和1个个GroupBox控件,窗体及控件的设计控件,窗体及控件的设计外观如图外观如图6-6所示。所示。图图6-66-6窗体的设计状态窗体的设计状态 (3)切换到代码窗口,编写程序代)切换到代码窗口,编写程序代码,实现其功能。码,实现其功能。定义窗体级的定义窗体级的BindingManagerBase类类的对象变量:的对象变量:DimbmDataAsBindingManagerBase。窗体窗体Load事件过程的程序代码如代码事件过程的程序代码如代码6-3-1所示。所示。3代码分析代码分析代码分析如表代码分析如表6-5所示。所示。代代 码码 序序 号号行行 号号代代 码码 分分 析析代代码码6-3-16-3-10404行至行至0808行行定定义义了两个数据适配器分了两个数据适配器分别别从从“班班级级”表表中和中和“学生信息学生信息”表中提取数据表中提取数据1010行和行和1111行行使用两个数据适配器将数据填充到同一使用两个数据适配器将数据填充到同一个数据集两个不同的表中个数据集两个不同的表中1313行至行至1515行行建立用来建立用来连连接接“班班级级”表与表与“学生信息学生信息”表表的的 DataRelationDataRelation 对对象,其名称象,其名称为为“每每个班个班级级的学生的学生”表表6-56-5程序代码分析程序代码分析 4知识要点说明知识要点说明代码代码6-3-1中的第中的第13行至第行至第15行建立行建立“班级班级”表与表与“学生信息学生信息”表的表的DataRelation对象,也可以分多步完成,程序代码如代对象,也可以分多步完成,程序代码如代码码6-3-2所示。所示。(1)建立一个)建立一个DataRelation对象对象使用使用DataRelation构造函数来建立一个构造函数来建立一个DataRelation对象,在建立对象,在建立DataRelation对对象时,通常要指定使用父表的哪一个字段象时,通常要指定使用父表的哪一个字段与子表的哪一个字段来建立两者间的关系。与子表的哪一个字段来建立两者间的关系。此字段通常是两表的共同字段,而且分别此字段通常是两表的共同字段,而且分别是父表的主键与子键的外键,这两个字段是父表的主键与子键的外键,这两个字段的数据类型要相同。的数据类型要相同。(2)将所建立的)将所建立的DataRelation对象加对象加入数据集的入数据集的DataRelationCollection中中DataRelationCollection是数据集的是数据集的DataRelation对象的集合,可以通过对象的集合,可以通过DataSet的的Relations属性来访问属性来访问DataRelationCollection。经常使用。经常使用DataRelationCollection的的Add、Clear和和Remove等方法来管理它所包含的对象。等方法来管理它所包含的对象。6.3.2使用一个数据适配器浏使用一个数据适配器浏览两个数据表中的数据览两个数据表中的数据【实例实例6-4】1设计任务设计任务设计任务与实例设计任务与实例6-3相同。相同。2设计过程设计过程(1)新建一个项目)新建一个项目Chapter6_4。(2)窗体及控件的设计外观如图)窗体及控件的设计外观如图6-6所示。所示。(3)切换到代码窗口,编写程序代)切换到代码窗口,编写程序代码,实现其功能。码,实现其功能。窗体窗体Load事件过程的程序代码如代码事件过程的程序代码如代码6-3-3所示。所示。3代码分析代码分析代码代码6-3-3与代码与代码6-3-1相似,不同之处相似,不同之处是代码是代码6-3-3使用一个数据适配器来取得数使用一个数据适配器来取得数据源中两个数据表(据源中两个数据表(“班级班级”表与表与“学生学生信息信息”表)中的数据,并建立两者间的关表)中的数据,并建立两者间的关系。系。代码代码6-3-3中的第中的第04行和第行和第05行建立了行建立了一个数据适配器以便针对一个数据适配器以便针对“班级班级”表执行表执行Select语句来提取要填入数据集的数据记录,语句来提取要填入数据集的数据记录,第第09行和第行和第10行更改数据适配器的行更改数据适配器的SelectCommand.CommandText来重新指定来重新指定用来提取数据源的数据记录的用来提取数据源的数据记录的Select语句。语句。6.46.4数据视图(数据视图(DataViewDataView)的应)的应用用6.4.1DataView概述概述借助于借助于DataView,能够为保存在,能够为保存在DataTable中的数据建立不同的视图。中的数据建立不同的视图。建立建立DataView可以采用两种方式:第一种可以采用两种方式:第一种方式是使用方式是使用DataView的构造函数,第二种的构造函数,第二种方式是建立方式是建立DataTable的的DefaultView属性属性的一个引用。的一个引用。1DataView的主要功能的主要功能(1)提供一种动态的数据查看方式,)提供一种动态的数据查看方式,利用利用DataView可以使用不同的排序方可以使用不同的排序方式查看数据表中的数据,也可以根据式查看数据表中的数据,也可以根据记录状态或筛选表达式来筛选数据表记录状态或筛选表达式来筛选数据表中的数据。中的数据。(2)为数据表中的数据建立不同的)为数据表中的数据建立不同的视图,将这些数据与窗体上的控件进视图,将这些数据与窗体上的控件进行绑定。行绑定。2DataView的构造函数的构造函数DataView的构造函数有以下的构造函数有以下3个重载个重载版本。版本。(1)不使用任何参数来初始化)不使用任何参数来初始化DataView类的新实例:类的新实例:DataView()。(2)构造函数包含一个参数:)构造函数包含一个参数:DataView(ByvalTableAsDataTable)。(3)构造函数包含四个参数:)构造函数包含四个参数:DataView(ByvalDataView(Byval Table As Table As ataTableataTable,_,_ ByvalByval RowFilterRowFilter As String,_ As String,_ ByvalByval Sort As String,_ Sort As String,_ ByValByVal RowStateRowState As As DataViewRowStateDataViewRowState)。3DataView的主要属性和方法的主要属性和方法(1)DataView的主要属性的主要属性Table:获取或设置:获取或设置DataView的数的数据源。据源。RowFilter:获取或设置:获取或设置DataView的筛选条件。的筛选条件。Sort:获取或设置:获取或设置DataView的排序的排序方式。方式。AllowNew:设置是否可以新增记录。:设置是否可以新增记录。AllowEdit:设置是否可以修改数据。:设置是否可以修改数据。AllowDelete:设置是否可以删除记:设置是否可以删除记录。录。Count:获取:获取DataView所包含的记所包含的记录数目。录数目。Item:获取:获取DataView中的某一条记中的某一条记录。录。DataViewManager:为用户提供一:为用户提供一种方便的方法来管理每个表的默认视图设种方便的方法来管理每个表的默认视图设置。置。(2)DataView的主要方法的主要方法AddNew:用于在:用于在DataView中添加中添加新的记录。新的记录。Delete:用于删除索引所指定的记:用于删除索引所指定的记录。录。Find:根据指定的主键值查找一条:根据指定的主键值查找一条或多条记录。或多条记录。4DataView的应用实例的应用实例【实例实例6-5】(1)设计任务)设计任务设计一个窗体,使用设计一个窗体,使用DataView浏览浏览“学生信息学生信息”表中所有男生的数据,并且要表中所有男生的数据,并且要求按姓名的降序排列。该窗体的运行效果求按姓名的降序排列。该窗体的运行效果如图如图6-7所示。所示。图图6-76-7使用使用DataVi