ADO.NET数据库访问技术案例教程 第6章 浏览数据源中的数据.ppt_第1页
ADO.NET数据库访问技术案例教程 第6章 浏览数据源中的数据.ppt_第2页
ADO.NET数据库访问技术案例教程 第6章 浏览数据源中的数据.ppt_第3页
ADO.NET数据库访问技术案例教程 第6章 浏览数据源中的数据.ppt_第4页
ADO.NET数据库访问技术案例教程 第6章 浏览数据源中的数据.ppt_第5页
已阅读5页,还剩157页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章浏览数据源中的数据 浏览数据源中的数据数据库应用系统中经常以各种方式浏览数据源中的数据 ADO NET也提供了多种浏览数据源中的数据的方法 知识技能目标 1 掌握SqlCommand对象的ExecuteReader方法 2 掌握数据读取器SqlDataReader读取数据的方法 3 掌握设置数据命令参数的方法 4 掌握浏览多个数据表中的数据的方法 5 掌握使用DataView对象排序数据和筛选数据的方法 6 掌握使用Find方法和Select方法搜索数据的方法 本章学习导航 本章探讨浏览数据源中的数据的方法 主要涉及Command对象 DataReader对象和DataAdapter对象 由于涉及的内容较多 建议分为三个教学单元 第一个教学单元为6 1和6 2 第二个教学单元为6 3和6 4 第三个教学教学为6 5 6 1使用数据读取器浏览数据源中的数据 如果要创建SqlDataReader对象或者OleDbDataReader对象 则必须调用Command对象的ExecuteReader方法 而不能直接使用构造函数 6 1 1创建DataReader对象创建DataReader对象与创建DataAdapter对象不同 不能使用New方法来创建 而只能通过Command对象的ExecuteReader方法创建 例如使用Comm命令对象创建SqlDataReader对象的代码如下 Dimreader1AsSqlDataReaderreader1 comm ExecuteReader 6 1 2DataReader类的属性DataReader类的属性如表6 1所示 表6 1DataReader类的属性 当SqlDataReader关闭后 只能访问IsClosed和RecordsAffected属性 6 1 3DataReader类的方法DataReader类的方法如表6 2所示 表6 2DataReader类的方法 6 1 4实例说明 实例6 1 1 设计任务设计一个窗体 用于浏览选定班级的班级信息和该班对应的学生信息 其运行效果如图6 1所示 在 班级编号 对应的组合框中选择一个班级编号 文本框中会显示对应班级的 班级名称 和 班级编号 同时列表框中会显示对应班级的学生信息 图6 1使用数据读取器浏览数据源中的数据 2 设计过程 1 新建一个项目Chapter6 1 2 在窗体中添加1个ComboBox控件 2个TextBox控件 1个ListBox控件和多个Label控件 窗体及控件的设计外观如图6 2所示 图6 2窗体的设计状态 3 切换到代码窗口 编写程序代码 实现其功能 窗体级对象变量的定义如代码6 1 1所示 窗体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 2使用数据适配器浏览单个数据表中的数据 6 2 1创建DataAdapter对象可以利用 工具箱 中的DataAdapter组件创建 也可以编写程序代码创建 VisualStudio NET中提供了SqlDataAdapter和OleDbDataAdapter等多种类用于分别创建相应的DataAdapter对象 1 创建SqlDataAdapter对象语法格式如下 Dim对象名AsNewSqlDataAdapter 2 创建OleDbDataAdapter对象语法格式如下 Dim对象名AsNewOleDbDataAdapter 3 SqlDataAdapter构造函数的重载形式SqlDataAdapter类或OleDbDataAdapter类有四种重载形式 SqlDataAdapter构造函数的重载形式如下 1 SqlDataAdapter 2 SqlDataAdapter ByValselectCommandAsSqlCommand 3 SqlDataAdapter ByValselectCommandTextAsString ByValselectConnectionAsSqlConnection 4 SqlDataAdapter ByValselectCommandTextAsString ByValselectConnectionStringAsString 数据访问最主要的操作是查询 插入 删除和更新四种 DataAdapter对象提供了四个属性与这四种操作相对应 设置了这四个属性后 DataAdapter对象就知道如何从数据库获得所需的数据 可以是新增记录或者删除记录 也可以是更新数据源 四种属性如表6 3所示 表6 3DataAdapter类的常用属性 6 2 3DataAdapter类的主要方法1 Fill方法Fill方法用于向DataSet对象填充从数据源中读取的数据 1 调用Fill方法的语法格式调用Fill方法的语法格式有多种 常见的格式如下 DataAdapter对象名 Fill DataSet对象名 数据表名 其中第一个参数是数据集对象名 表示要填充的数据集对象 第二个参数是一个字符串 表示本地缓冲区中建立的临时表的名称 2 Fill方法的重载版本Fill方法提供了8个重载版本 最常用的有以下4个重载版本 Fill ByValds1AsDataSet AsInteger Fill ByValds1AsDataSet ByValsrcTableAsString AsInteger Fill ByValds1AsDataSet ByValstartRecordAsInteger ByValmaxRecordsAsInteger ByValsrcTableAsString AsInteger Fill ByValtempTableAsDataTable AsInteger 3 Fill方法的正确使用 如果调用Fill 之前连接已关闭 则先将其打开以检索数据 数据检索完成后再将连接关闭 如果调用Fill 之前连接已打开 连接仍然会保持打开状态 如果数据适配器在填充DataTable时遇到重复列 它们将以 columnname1 columnname2 columnname3 这种形式命名后面的列 如果传入的数据包含未命名的列 它们将以 column1 column2 的形式命名存入DataTable 向DataSet添加多个结果集时 每个结果集都放在一个单独的表中 可以在同一个DataTable中多次使用Fill 方法 如果存在主键 则传入的行会与已有的匹配行合并 如果不存在主键 则传入的行会追加到DataTable中 2 Update方法Update方法用于将数据集DataSet对象中的数据按InsertCommand属性 DeleteCommand属性和UpdateCommand属性所指定的要求更新数据源 即调用3个属性中所定义的SQL语句更新数据源 Update方法常见的调用格式如下 DataAdapter对象名 Update DataSet对象名 数据表名 其中第一个参数是数据集对象名 表示要将哪个数据集对象中的数据更新到数据源 第二个参数是一个字符串 表示临时表的名称 DataAdapter对象的Update方法会自动调用AcceptChanges 6 2 4SqlDataAdapter构造函数和Fill方法的应用举例SqlDataAdapter构造函数的重载形式和Fill方法的重载形式举例说明如下所示 6 2 5使用数据适配器浏览单个数据表中的数据应用举例 实例6 2 1 设计任务设计一个窗体 用来浏览 学生信息 表中的记录数据 其运行效果如图6 3所示 图6 3使用数据适配器和数据集浏览数据源中数据 2 设计过程 1 新建一个项目Chapter6 2 2 在窗体中添加一个DataGrid控件 窗体及控件的设计外观如图6 4所示 3 切换到代码窗口 编写程序代码 实现其功能 图6 4窗体的设计状态 3 代码分析代码分析如表6 4所示 表6 4程序代码分析 4 知识要点说明 1 SqlDataAdapter对象的Fill方法使用SelectCommand属性所指定的Select语句或者存储过程从数据源中提取记录数据 并将所提取的数据记录填充到数据集对应的表中 2 在调用Fill方法时 相关的连接对象不需要处于打开状态 但是为了有效控制与数据源的连接 减少连接打开的时间和有效利用资源 一般应自行调用连接对象的Open方法来明确打开连接 调用连接对象的Close方法来明确关闭连接 3 如果SelectCommand属性的Select语句或者存储过程没有返回任何记录 则不会在数据集中建立表 4 如果SelectCommand属性的Select语句或者存储过程返回多个结果集 则会将各个结果集的记录分别存入多个不同的表中 这些表的名称按顺序分别为Table Table1 Table2等 6 3使用数据适配器浏览多个数据表中的数据 6 3 1使用两个数据适配器浏览两个数据表中的数据一个数据集可以和不限数目的数据适配器一起配套使用 每一个数据适配器用来填充数据集中的一个或多个数据表 实例6 3 1 设计任务设计一个窗体 用来浏览选定班级的班级信息和该班对应的学生信息 移动记录位置 文本框中会显示不同班级的 班级编号 和 班级名称 同时DataGrid控件中会显示对应班级的学生信息 窗体的运行效果如图6 5所示 图6 5使用两个数据适配器浏览数据表中的数据 2 设计过程 1 新建一个项目Chapter6 3 2 在窗体中添加3个TextBox控件 4个Button控件 2个Label控件和1个GroupBox控件 窗体及控件的设计外观如图6 6所示 图6 6窗体的设计状态 3 切换到代码窗口 编写程序代码 实现其功能 定义窗体级的BindingManagerBase类的对象变量 DimbmDataAsBindingManagerBase 窗体Load事件过程的程序代码如代码6 3 1所示 3 代码分析代码分析如表6 5所示 表6 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 4数据视图 DataView 的应用 6 4 1DataView概述借助于DataView 能够为保存在DataTable中的数据建立不同的视图 建立DataView可以采用两种方式 第一种方式是使用DataView的构造函数 第二种方式是建立DataTable的DefaultView属性的一个引用 1 DataView的主要功能 1 提供一种动态的数据查看方式 利用DataView可以使用不同的排序方式查看数据表中的数据 也可以根据记录状态或筛选表达式来筛选数据表中的数据 2 为数据表中的数据建立不同的视图 将这些数据与窗体上的控件进行绑定 2 DataView的构造函数DataView的构造函数有以下3个重载版本 1 不使用任何参数来初始化DataView类的新实例 DataView 2 构造函数包含一个参数 DataView ByvalTableAsDataTable 3 构造函数包含四个参数 DataView ByvalTableAsataTable ByvalRowFilterAsString ByvalSortAsString ByValRowStateAsDataViewRowState 3 DataView的主要属性和方法 1 DataView的主要属性 Table 获取或设置DataView的数据源 RowFilter 获取或设置DataView的筛选条件 Sort 获取或设置DataView的排序方式 AllowNew 设置是否可以新增记录 AllowEdit 设置是否可以修改数据 AllowDelete 设置是否可以删除记录 Count 获取DataView所包含的记录数目 Item 获取DataView中的某一条记录 DataViewManager 为用户提供一种方便的方法来管理每个表的默认视图设置 2 DataView的主要方法 AddNew 用于在DataView中添加新的记录 Delete 用于删除索引所指定的记录 Find 根据指定的主键值查找一条或多条记录 4 DataView的应用实例 实例6 5 1 设计任务设计一个窗体 使用DataView浏览 学生信息 表中所有男生的数据 并且要求按姓名的降序排列 该窗体的运行效果如图6 7所示 图6 7使用DataView浏览数据表中的数据 2 设计过程 新建一个项目Chapter6 5 在窗体中添加一个DataGrid控件 用于显示 学生信息 表中男生的数据 切换到代码窗口 编写程序代码 实现其功能 窗体Load事件处理程序的公用代码如代码6 4 1所示 其余的程序代码如代码6 4 2至6 4 4所示 3 知识要点说明 使用DataView对DataTable中的数据进行排序 可以使用Sort参数来决定要根据一个或多个字段来排序 也可以在建立DataView对象之后再配置其Sort属性以便决定要如何进行排序 使用DataView筛选DataTable中的数据 可以使用RowFilter参数筛选数据的表达式 也可以在建立DataView对象之后再配置其RowFilter属性以便决定要如何筛选数据 如果使用第三个版本的DataView构造函数建立DataView对象 可以使用RowState参数来设定记录状态的筛选条件 RowState参数的类型是枚举类型DataViewRowState 其成员与说明如表6 6所示 也可以在建立DataView对象之后再配置其RowStateFilter属性以便决定要如何筛选记录版本 RowStateFilter属性的配置方式与RowState参数的配置方式相同 5 DataTable的DefaultView属性DataTable的DefaultView属性会返回一个以此DataTable作为源表的DataView对象 以便让用户灵活地实现排序 筛选或查找DataTable中的记录 6 4 2使用DataView来排序数据 实例6 6 1 设计任务设计一个窗体 用于在程序运行期间动态配置DataView的Sort属性 以实现动态排序数据 窗体的运行效果如图6 8所示 图6 8使用DataView排序数据 首先在ComboBox1控件中选择排序字段 图6 8中选择了 姓名 作为排序字段 然后选择排序方式 图6 8中选择了 递增 排序方式 接着单击 排序 按钮 DataGrid1控件显示了排序后的数据 2 设计过程 1 新建一个项目Chapter6 6 2 在窗体中添加1个DataGrid控件 1个ComboBox控件 2个Button控件 2个Label控件和2个RadioButton控件 窗体及控件的设计外观如图6 9所示 图6 9使用DataView排序数据窗体的设计状态 3 切换到代码窗口 编写程序代码 实现其功能 窗体级的对象变量的定义如代码6 4 6所示 3 代码分析代码分析如表6 7所示 表6 7程序代码分析 4 知识要点说明使用DataView排序DataTable中的数据时应注意以下问题 1 递增排序使用关键词 ASC 递减排序使用关键词 DESC 2 排序方式默认为递增排序 ASC可以省略不写 3 Sort参数或Sort属性的书写格式为 排序字段名ASC DESC 4 多字段排序数据 在各字段之间使用逗号 加以分隔 例如 学号ASC 姓名DESC 5 如果需要按数据表的主键排序 可以设置ApplyDefaultSort属性 该属性的默认值为False 表示不是根据主键来排序数据 当该属性的值设置为True时 表示按主键来排序数据 应注意的是 只有在Sort属性为NULL引用或空字符串并且数据表已定义了主键时 ApplyDefaultSort属性的设置才会生效 6 4 3使用DataView来筛选数据 实例6 7 1 设计任务设计一个窗体 用于在程序运行期间动态配置DataView的RowFilter属性 以实现动态筛选数据 窗体的运行效果如图6 10所示 图6 10使用DataView筛选数据 首先在ComboBox1控件中选择一个 班级编号 作为第一个筛选条件 图6 10中选择了班级编号为 2003030201 作为第一个筛选条件 然后选择 性别 作为第二个筛选条件 图6 10中选择了性别为 女 作为第二个筛选条件 接着单击 筛选 按钮 DataGrid1控件中显示了排序后的数据 同时TextBox1控件中显示了DataView中的记录数目 2 设计过程 1 新建一个项目Chapter6 7 2 在窗体中添加1个DataGrid控件 2个ComboBox控件 2个Button控件 3个Label控件和1个TextBox控件 窗体及控件的设计外观如图6 11所示 图6 11使用DataView筛选数据窗体的设计状态 3 切换到代码窗口 编写程序代码 实现其功能 窗体级对象变量的定义如代码6 4 6所示 窗体Load事件过程的程序代码如代码6 4 9所示 窗体中 筛选 按钮的Click事件过程的程序代码如代码6 4 10所示 3 代码分析代码分析如表6 8所示 表6 8程序代码分析 4 知识要点说明使用DataView筛选数据时 筛选表达式必须为字符型 其书写格式与SQL语句中的Where条件相似 例如 筛选性别为 女 的学生信息 筛选表达式应写成 性别 女 筛选班级编号为ComboBox1控件中当前的选取值 筛选表达式应写成 班级编号 comboBox1 SelectedItem ToString 6 5查找记录 使用数据库应用系统时 经常需要查找符合特定条件的数据 本节着重讲解如何搜索符合条件的记录 6 5 1使用Select语句查找符合条件的记录 实例6 8 1 设计任务设计一个窗体 用于实现模糊查询 窗体的运行效果如图6 12所示 图6 12使用Select语句查找记录 在文本框中输入所要查找的姓名 如果对应的记录存在 DataGrid控件中便会显示对应的数据 在图6 12中的文本框中输入 肖 上方的DataGrid控件中便会显示所有姓 肖 的学生数据 2 设计过程 1 新建一个项目Chapter6 8 2 在窗体中添加1个DataGrid控件 1个TextBox控件和1个Label控件 窗体及控件的设计外观如图6 13所示 图6 13使用Select语句查找记录窗体的设计状态 3 切换到代码窗口 编写程序代码 实现其功能 窗体级对象变量的定义如代码6 5 1所示 窗体Form1的Load事件过程的程序代码如代码6 5 2所示 文本框TextBox1的TextChanged事件过程的程序代码如代码6 5 3所示 3 代码分析代码分析如表6 9所示 表6 9程序代码分析 6 5 2使用Find方法查找DataView中的记录 实例6 9 1 设计任务设计一个窗体 使用Find方法查找DataView中的记录 窗体的运行效果如图6 14所示 图6 14查找DataView中的记录 在TextBox1控件中输入一个学生的姓名 然后单击 搜索 按钮 如果查找到所指定的学生姓名 DataGrid控件中对应的行将处于选中状态 2 设计过程 1 新建一个项目Chapter6 9 2 在窗体中添加1个DataGrid控件 1个Button控件 1个Label控件和1个TextBox控件 窗体及控件的设计外观如图6 15所示 3 切换到代码窗口 编写程序代码 实现其功能 图6 15查找DataView中记录窗体的设计状态 窗体级对象变量的定义如代码6 5 4所示 窗体Load事件过程的程序代码如代码6 5 5所示 搜索 按钮的Click事件过程的程序代码如代码6 5 6所示 3 代码分析代码分析如表6 10所示 表6 10程序代码分析 4 知识要点说明 1 DataView的Find方法只能使用记录的排序值来查找记录 在调用Find方法之前必须对DataView中的数据进行排序 2 Find方法返回所查找到的记录的索引 如果有多条记录符合条件 则只会返回第一条符合查找条件的记录的索引 如果找不到任何符合条件的记录 则Find方法会返回 1 3 Find方法在查找数据值时 会根据DataTable的CaseSensitive属性来决定是否考虑大小写 查找值完全符合排序索引值时 才会返回结果 4 Find方法有两个重载版本 第一个重载版本的形式为 Find ByValkeyAsObject AsInteger 第二个重载版本的形式为 Find ByValkey AsObject AsInteger第二个版本的Find方法的参数为一个对象数组 要求使用多个字段来排序数据 调用该版本的Find方法时 必须将一个对象数组传递给它 并且对象数组中各个数据的顺序必须与DataView的Sort属性中所指定的字段顺序相符 6 5 3使用Select方法查找符合指定条件的记录 实例6 10 1 设计任务设计一个窗体 使用DataTable Select方法 从DataTable中查找符合指定条件的记录 窗体的运行效果如图6 16所示 图6 16使用Select方法查找记录的结果 2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论