Visual Basic.NET程序设计课件 第10章 数据库应用.ppt
第10章 数据库应用,10.1 数据库的概念 10.2 建立数据库 10.3 SQL语言简介 10.4 VB.NET的数据库操作,使用文件可以永久保存数据,实现数据的重用和共享。文件的组织由生成文件的程序决定,其他人要使用该文件就必须知道它的格式、数据的类型、合法值的范围等。 当数据量越来越大、数据共享和数据安全的要求越来越高时,文件系统的固有缺陷就表现得越来越明显。 为了解决这个问题,数据库系统在20世纪60年代应运而生,出现了多种逻辑结构的数据库。 根据数据的逻辑结构把数据库分成层次、网状、关系和对象4种模型。 层次和网状数据库现在已很难见到。对象式的数据库检索效率高,与人类思维最接近,是目前数据库技术研究的热点,但还不够成熟。 关系数据库简单、易用,理论基础坚实,是当今数据库技术的主流。 本章首先对关系数据库作简单描述,然后讲述在VB.NET程序中如何对关系数据库中的数据进行操作。,一个数据库系统由数据库和数据库管理系统(Data Base Management System,DBMS)组成。 数据库中的数据是存放在外存储器中的永久性数据,使用时必须把它调入内存。 数据库管理系统是一个专门的管理软件,负责数据的检索、增加、删除与修改,维护数据的一致性与完整性,提供正确使用的各种机制。 应用程序不能直接使用数据库中的数据,只能提出访问数据的请求,由DBMS完成对数据的操作。,10.1 数据库的概念,关系数据库的逻辑结构是二维表的集合。这些二维表是有应用语义的。 记录:表中的一行,描述事物状态的一组数据; 字段:表中的一列,描述事物的某个特征(属性); 主键:能够唯一地标识一个记录的字段(主关键字); 外键:表之间语义相同且取值范围也相同的字段。外键是表之间联系的字段。 例如,教务数据库可以包含以下3个表: 教师(教师号,教师姓名,系,教研组) 课程(课程号,课程名,学时,学分,层次) 排课(班级号,课程号,教师号,上课时间,课室号) 括号内是每个表的字段名。 “教师号”可以作为教师表的主键。课程表中“课程号”是主键。排课表中的主键是字段集合(班级号,课程号)。 排课表的主键“教师号”是教师表的外键。,10.2 建立数据库,建立Access数据库的方法:, 启动Microsoft Access 2007,单击左上角的“Office按钮”,从“文件”菜单中选择“新建”菜单项; 或者直接单击界面上“空白数据库”图标,设定新建数据库的路径和名称。 如图10.1所示,建立一个名为“教务”的数据库,系统自动添加文件后缀.accdb。, 单击“创建”按钮确定后,进入数据库的编辑界面。图中显示的是第一个默认名为“表1”的数据表视图,它是一个空表。 选择“视图”菜单的“设计视图”菜单项,在“另存为”对话框中输入数据表的名称。如图10.2所示,输入第一个表的名称为“教师”。, 确定数据表名称后,打开表设计窗口(如图10.3所示),按设计要求输入字段名称,从“数据类型”下拉列表中选择适当的类型,并且在“字段属性”区域中设置字段的相关属性。,教务数据库各表的字段名称、数据类型和属性, 按照以上方法,建立好3个表的结构之后,选择“视图”菜单的“数据表视图”菜单项,或者双击表名,可以打开数据输入窗口,在每列中输入相应类型和格式的数据,即可完成数据表的建表工作。 图10.4是完成输入数据的教师表。,SQL是Structured Query Language(结构化查询语言)的缩写,是最重要的关系数据库操作语言。 SQL语言基本上独立于具体的数据库,独立于所使用的计算机、网络与操作系统。 基于SQL的DBMS系统产品可以运行在各种计算机系统上,具有良好的可移植性。 SQL语言不是一个完整的程序设计语言。它没有用于控制程序分支的GOTO语句,也没有用于控制循环的DO或For语句,它主要包括创建、更新和操作数据库中的数据的语句。,10.3 SQL语言简介,SQL语句分两大类:DDL(Data Definition Language,数据定义语言)语句和DML(Data Manipulation Language,数据操纵语言)语句。 DDL语句用于创建和定义新的数据库表、字段和索引。DML语句用于检索、更新和插入数据。 从用户的角度看,SQL的DDL语句(见表10-4)有3类,即CREAT(表定义)、ALTER(表修改)和DROP(表删除)。 SQL的DML语句(见表10-5)包括数据检索语句(SELECT语句)和数据更新语句(INSERT语句、UPDATE语句和DELETE语句)两大类。,10.3.1 SQL的语句,DDL语句,DML语句,功能:返回一张表。该表由满足检索条件的记录排列而成。 格式: SELECT DISTINCT FROM , WHERE GROUP BY HAVING ORDER BY ASC/DESC SELECT把所要选择查看的字段(即返回的表中所要包含的字段)的名字排列在关键字“SELECT”后面,各字段名之间用逗号“,”分隔。 DISTINCT表示删掉查询结果中重复的行。,10.3.2 SQL中的数据操作,1数据检索语句(SELECT语句),SQL子句,例10-1,SELECT语句应用实例。, 查看教师表中的全部数据。 SELECT * FROM 教师 在此,* 代表全部字段的字段名。 等价于: SELECT 教师号,教师名,系,教研组 FROM 教师 检索的结果返回一张与表10-1内容一样的表。 查看教师表中的全部教师的编号、姓名和所在系。 SELECT教师号,教师名,系 FROM 教师 检索的结果返回一张表,其内容是在表10-1基础上去掉“教研组”列。, 在教师表中检索计算机系的教师。 SELECT * FROM 教师 WHERE 系=计算机 结果返回一张内容如表10-7所示的计算机系的教师表。, 在课程表中查找学时数大于75、小于90的课程的课程名、学时数和学分数。 SELECT 课程名,学时,学分 FROM 课程 WHERE 学时75 And 学时<90 结果返回一张内容如表10-8所示的结果表。, 在教师表中收集姓梁的教师的材料 SELECT * FROM 教师 WHERE 教师名 LIKE 梁% 在上述语句中,与LIKE关键字匹配的字符“%”代表任意个字符。 结果返回一张内容如表10-9所示的表。, 查询星期二第3、4节上课的教师名和课程名 SELECT排课.上课时间,教师.教师名,课程表.课程名 FROM排课,教师,课程 WHERE 排课.上课时间=“周二3-4” And课程.课程号=排课.课程号 And 教师.教师号=排课.教师号 为了区别不同表中的同名字段,可以使用格式: . 结果返回一张如表10-10所示的有两个相同行的表。,要使返回的表中没有相同的行,在该查询语句的SELECT后面要加上DISTINCT, 在课程表中使用“GROUP BY”,按课程名分组。 SELECT 课程名, SUM(学时), SUM(学分) FROM 课程 GROUP BY 课程名, 在课程表中使用“GROUP BY”按课程名分组后,使用HAVING提取同组课程学时之和大于70的行。 SELECT 课程名, SUM(学时), SUM(学分) FROM 课程 GROUP BY 课程名 HAVING SUM (学时)70,2数据更新语句,(1)UPDATE语句 功能:对合乎条件的记录,改变其中一个或多个字段(列)的值。 格式: UPDATE 表名SET = , = WHERE (2)INSERT语句 功能:添加新的记录到表中。 格式: INSERT INTO ( ,) VALUES ( , ) (3)DELETE语句 功能:删除表中记录。若无WHERE语句则删除表中全部数据,但表仍然存在。 格式:DELETE FROM WHERE ,例10-2,数据更新示例。, 把课程表中每门课程增加18学时,增加1个学分 UPDATE 课程 SET 学时=学时+18,学分 = 学分+1 把0102号课程星期二3,4节的课改为星期一3、4节,地点不变。 UPDATE 排课 SET 上课时间=周一3-4 WHERE 课程号 =0102 And 上课时间 = 周二3-4 在教师表中增加一个教师。 INSERT INTO 教师(教师号,教师名,系,教研组) VALUES (1031,余佩玉,电信工程,系统) 删除排课表中全部数据。 DELETE FROM 排课 从教师表中删除0873号教师的记录。 DELETE FROM 教师 WHERE 教师号 =0873,10.4 VB.NET中的数据库操作,. NET框架提供一套面向对象的数据库访问工具,称为ADO.NET。 ADO是ActiveX Data Object的缩写,它提供一个允许通过代码访问数据库的应用程序接口。 ADO.NET对象模型的两个核心组件是DataSet对象和 .NET数据提供程序。 DataSet对象是一个数据缓冲,其结构与关系数据库结构一致。当程序需要操作数据库时,连接外部数据源生成DataSet对象的数据。程序对本地缓存数据进行操作,而不是直接对数据库操作。若需要把操作结果保存到数据源中,程序需要重新连接数据源,执行更新操作。 .NET数据提供程序是数据库的访问接口,它包括Connection、DataReader和DataAdapter等一组对象,负责建立和连接数据库操作。,ADO.NET主要使用SQL Server.NET或OLE DB.NET数据提供程序来访问数据源。 其中,SQL Server.NET数据提供程序用于访问SQL Server 7.0或更新版本的数据库,如SQL Server 2000。 OLE DB.NET数据提供程序主要用于访问Access、Oracle、Sybase、SQL Server 6.5或更老版本的数据库,以及其他数据源。 .NET框架的各种语言都可以在代码中使用ADO.NET接口来编写操作数据库的应用程序。并且,.NET框架提供了一套可视化的数据库工具(Visual Datebase Tools),包括数据库关系图设计、查询设计和表设计。 应用这些工具,程序员几乎不必编写代码,就可以操作数据库。本章将通过实例介绍这些工具的应用。 本节沿用10.2节建立的教务数据库,演示如何使用IDE可视化数据库工具和向导,连接数据库、设计数据库和查询数据库。,10.4.1 连接数据库,连接数据库是指把外部已经建立的数据源导入应用程序,以便应用程序可以方便地访问数据库的文件。,1创建项目,例10-3,在窗体显示教务数据库中的教师表。,创建一个新的Windows窗体应用程序,项目名称和窗体的Text属性都设置为“显示数据表”。,2添加数据访问控件,集成开发环境工具箱“数据”控件列表中包含了一组操作数据库的控件。选用带有OleDb前缀的控件。,3添加数据源,选择IDE主菜单的“数据”菜单项,从下拉列表中选择“添加新数据源”,系统弹出“数据源配置向导”对话框,将可视化地引导用户完成数据源连接的工作。,(1)选择数据源类型,在如图10.7(a)所示的“选择数据源类型”对话框中,选择数据的来源为“数据库”,在如图10.7(b)所示的“选择数据库模型”对话框中选择“数据集”。,(2)添加连接数据库,在如图10.8(a)所示的“选择您的数据连接”对话框中,单击“新建连接”按钮。 在“添加连接”对话框中选择已经建立的数据库文件,如图10.8(b)所示。,系统弹出确认消息框,如图10.8(c)所示,询问是否把数据文件复制到当前项目中。根据需要复制,单击“是”按钮后,“数据源”下拉列表中将出现连接成功的数据库文件名。,(3)保存连接字符串,如图10.9所示,询问用户是否将连接字符串保存到应用程序配置文件中。连接字符串指定了一个数据库的文件路径,以及一些用于确定如何访问数据库的额外设置。保存连接字符串便于以后修改设置。,(4)选择在DataSet中包含的数据库对象,从图10.10“选择数据库对象”对话框的树状列表中,单击复选框,选取需要的数据表,把这些数据提取到DataSet的缓冲区。,完成上述操作后,数据库就是项目的组成部分了。从图10.11看到,解决方案视图中出现了“教务DataSet.xsd”节点。,10.4.2 数据库设计工具,除了利用数据库管理系统,如10.2节介绍的应用Access建立数据库之外,.NET还提供了基本的数据库设计工具。,单击图10.11解决方案视图的“教务DataSet.xsd”节点,IDE打开数据库设计视图,如图10.12所示。,每个表都具有3种不同的功能: 标题栏用于显示表的名称。 行选择器可以通过单击行选择器来选择表中的数据表的列。如果该列是表的主键,则行选择器将显示一个键符号。 属性列帮助管理关系图的大小和布局。,用右键打开标题栏或行选择器的快捷菜单,可以完成数据库的关系设计、行列编辑以及建立查询等工作。,图10.13是添加了表之间关系的逻辑视图。,若要添加新表,用右键单击设计视图的空白处,从快捷菜单中选择“添加”“数据表”菜单项,IDE将自动添加一个默认名称的表,用户可以修改它的名称,添加字段以及设计与其他表的关系。,图10.13右下方是一个默认名为“DataTable1”添加的新表。要删除这个表,只要选取它,按Delete键就可以了。,IDE自动为每一个数据表生成了一个TabelAdapter对象以及一个基本查询。 例如,教师表的第二个标题栏是“教师TabelAdapter”,最后一行就是把基本查询封装而成的方法名称。 教师表的两个基本方法: 用教师TableAdapter的SELECT命令的结果填充关联数据表 教师TableAdapter.Fill 返回一个用数据填充了的新DataTable 教师TableAdapter.GetData(),选择快捷菜单中的“配置”菜单项,将打开“TabelAdapter配置向导”对话框,可以看到自动生成的SQL语句,如图10.14所示。,利用这个对话框,可以输入和修改SQL语句,也可以单击“查询生成器”按钮,进入查询生成器窗口,可视化地编辑SQL语句。,10.4.3 显示数据表,1显示一个数据表,选择IDE主菜单的“数据”“显示数据源”菜单项,IDE出现如图10.15所示的数据源视图。,从数据源视图把教师表节点拖放到窗体上。IDE在窗体上生成了两个控件: “教师BindingNavigator”控件 “教师DataGridView”控件 另外还生成了几个出现在组件托盘中的控件。这些控件的名称由IDE自动生成。,从设计视图可看出,控件标题栏设置显示为字段名称,可以通过属性表的Columns属性修改。 数据要在程序运行时才从数据库中提取并在DataGridView控件中显示出来。,标题栏下的按钮条是一个工具栏容器BindingNavigator,其用户界面由一系列ToolStrip的按钮、文本框和静态文本元素组成,用于实现大多数常见的数据相关操作(如添加数据、删除数据和在数据中导航)。 BindingNavigator控件通常与BindingSource控件成对出现,用于浏览窗体上控件(此例为DataGridView控件)显示的数据记录,并与它们交互。,生成和运行项目,可以看到如图10.17所示的结果。,在这个自动生成的程序中,利用DataGridView控件和BindingNavigator控件中的按钮,可以浏览、修改教师表,可以插入、删除记录和保存数据表。,2数据绑定,将显示控件连接到数据源的技术称为数据绑定。绑定后的控件可用于对数据进行修改和保存。 例如,把DataGridView控件绑定到数据库中一个表的DataSet上,这个过程.NET框架使用一组组件(如表10-13所示)实现。,(1)DataSet类对象,组件托盘中的“教务DataSet”对象是IDE在项目中添加教务数据库时生成的DataSet类对象,它模仿了关系数据库的结构,从数据源窗口可以看到对象的数据结构。 DataSet对象表示一个数据缓冲,提供的数据服务称为“断开缓存”。 DataSet对象可以由IDE自动生成,也可以用代码创建,DataSet对象包含3个常用的集合: DataTableCollection(数据表集合) DataRowCollection(行集合) DataColumnCollection(列集合) 使用DataSet的属性和方法可以灵活地操作数据表,有兴趣的读者请参阅相关MSDN资源。,(2)TabelAdapter类对象,TabelAdapter 类的对象“教师TabelAdapter” 是一个与教务数据库文件(即教务.accdb)进行交互的组件。 TabelAdapter 对象是数据库与DataSet对象之间通信的桥梁。 它用于传递各种SQL命令、把命令的执行结果填入DataSet对象。,(3)BindingSource类和DataGridView类对象,BindingSource类对象“教师BindingSource”和DataGridView类对象“教师DataGridView”用于标识一个数据源,把它绑定到相应的图形控件(如本例的BindingNavigator控件)上。 为了实现数据绑定,首先把“教师BindingSource”的DataSource属性设置为“教务DataSet”,然后把DataMember属性设置为“教师”表。 配置了这个“教师Binding Source”对象之后,把这个对象赋值给“教师DataGridView”对象的DataSource属性,指示这个DataGridView对象将显示什么数据。 注意:通过BindingSource和DataGridView对象,只是更新了DataSet对象。 如果要把这些修改永久地保存在数据库文件中,还需做保存数据的操作。,(4)BindingNavigator类对象,BindingNavigator类对象“教师BindingNavigator” 允许在窗体浏览和操作绑定于一个控件的数据。 BindingNavigator类对象与BindingSource类和DataGridView类对象通信,把对数据的操作关联到DataSet对象。,这些组件对象可以用代码建立,也可以在设计时把数据表节点从数据源视图拖动到窗体由IDE自动生成(见图10.16)。 图10.18显示了这些组件对象与数据库之间的关系。,在本例中,为了显示数据表,从数据源视图把教师表节点拖放到窗体上,IDE自动生成各个数据绑定的控件,设置了数据绑定属性,还自动生成相关代码。 若这些控件由程序员逐个添加,则需要手工设置它们的数据绑定属性。 从解决方案资源管理器中,打开项目的Form1.vb文件,其中包含可视化设计由系统自动生成的代码。 阅读这些代码,便于了解应用程序如何操作数据库。,Public Class Form1 工具栏容器的保存数据按钮单击事件过程 Private Sub 教师BindingNavigatorSaveItem_Click(ByVal sender As _ System.Object, ByVal e As System.EventArgs) _ Handles 教师BindingNavigatorSaveItem.Click 对窗体的输入控件执行验证 Me.Validate() 用DataGridView对象的数据更新DataSet对象 Me.教师BindingSource.EndEdit() 用DataSet对象的数据更新磁盘的数据库文件 Me.TableAdapterManager.UpdateAll(Me.教务DataSet) End Sub 装载窗体事件过程 Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load 执行基本查询,将数据加载到教务DataSet.教师表中 Me.教师TableAdapter.Fill(Me.教务DataSet.教师) End Sub End Class,3显示关联数据表,一个数据库系统中通常包含多个关联数据表。 IDE提供了简单的操作,通过数据源窗口,用外键绑定相关数据表显示控件,根据第一个表的数据来同步显示另一个表的数据。,例10-4,操作步骤: 新建一个新的Windows窗体应用程序。项目名称为“显示关联数据表”,窗体的Text属性为“显示排课情况”。 按照例10-3所示的方法添加数据源,把教务数据库连接到本项目。 打开IDE的数据源视图。单击“排课”表节点,从下拉列表中选择“详细信息”,如图10.19所示。,在窗体上显式教务系统的排课情况,同步显示相关课程和任课教师的详细信息。,“教师”表和“课程”表使用默认的DataGridView显示控件。, 把3个表的键字段(教师.教师号,课程.课程号,排课.教师号,排课.课程号)显示控件都设置为“ComboBox”,如图10.20所示。, 把“排课”表节点拖放到窗体中,窗体上生成一组显示控件和数据绑定组件,如图10.21所示。,可以根据需要调整窗体上显示控件的位置、大小以及修改标签上的显示文本。, 根据外键关联数据表。 选取窗体上“排课”表外键“课程号”的显示控件ComboBox,然后把数据源窗口中的“课程”表节点拖到ComboBox控件上。 IDE的组件托盘中出现“排课BindingNavigator”和“排课BindingSource”组件。 用同样的方法,把“教师”表拖到排课表的另一个外键“教师号”的显示控件ComboBox上。,ComboBox控件与数据表关联的属性,本例中,把“课程号”之后ComboBox控件的DisplayMember属性置为“课程号”字段。,同样,把“教师号”之后ComboBox控件的DisplayMember属性置为“教师号”。, 设置课程表和教师表的显示控件。 分别从数据源窗口把“排课”表节点和“教师”表节点拖入窗体,按需要调整它们的位置和大小,如图10.23所示。, 生成和运行项目。,用工具栏中的按钮移动排课表的记录,可以看到课程表和教师表中的记录根据外键值同步显示。,10.4.4 查询数据表,.NET框架可视化的数据库工具能够自动生成SQL语句和相关的显示控件,方便地实现数据库的不同方式查询。,1条件查询,在实际应用中,通常会根据一些特定的条件来筛选某些记录。 例如,从教师表中选择出计算机系的教师记录。这就要借助SQL语句实现。 IDE通过查询工具指定数据表和设置查询条件,把生成的查询语句封装为TabelAdapter对象的方法,窗体上的控件调用这些方法,就可以显示查询结果。,查看教师表中的计算机系教师的编号、姓名和所在系。,例10-5,操作步骤: 创建名为“条件查询”的Windows窗体应用程序,窗体的Text属性为“查询教师表”。 添加数据源“教务”数据库。选择数据库对象为“教师”表。 将“教师”表节点拖放到窗体中,生成数据绑定组件和显示数据表控件。 因为要求查询结果不显示“教研组”字段,可以用以下两种方法实现。,方法一: 从“教师DataGridView”控件的Columns属性中,把“教研组”列的Visble属性置为False,如图10.25所示。,这种方法对应的SELECT语句依然把除“教研组”外的全部字段填入DataGridView控件。,方法二: 用SELECT语句指定输出字段。这需要从“教师DataGridView”控件的Columns属性列中移除“教研组”列,并修改“教师TabelAdapter”的Fill方法。,操作方法:,在“教师DataGridView”控件的属性列表中,单击“Columns(集合)”属性右部的“”按钮,打开如图10.25所示的“编辑列”对话框,移除“教研组”列。 然后在“教师DataSet.xsd”的数据视图中,打开如图10.14所示的“TabelAdapter配置向导”,把查询语句修改为: SELECT 教师号,教师姓名,系 FROM 教师, 在设计窗口的组件托盘中,用右键打开“教师TabelAdapter”组件的快捷菜单,选择“添加查询”菜单项,IDE弹出如图10.26所示的“TableAdapter配置向导”对话框。,选择数据源表:从项目中可用表的下拉列表中选择要向其中添加查询的表。本例选择的数据源表为“教务DataSet.教师”。 选择参数化查询来加载数据:可以输入新的查询名称或对打开现有的查询名称。这个名称便是在程序中用于向DataSet填充程序结构的方法。 本例中输入的新查询名称为“FillBy_计算机系”。 查询文本:输入单击按钮时执行的SQL语句。用户可以按照10.3.2节介绍的语法形式输入特定的查询语句。图10.26中文本框显示的是一个默认的基本查询语句。 用户可以直接编辑SQL语句: SELECT 教师号,教师姓名,系 FROM 教师 WHERE (系= 计算机) 单击“完成”按钮之后执行步骤。, 单击查询标准生成器右下方的“查询生成器”按钮,将打开一个如图10.27所示的“查询生成器”对话框。查询生成器操作功能很强。它从上至下分成4个窗格。,条件窗格表格列的功能,SQL窗格显示查询生成器生成的SQL语句。并且,它是一个编辑窗口,可以对设计器创建的SQL语句进行编辑,也可以输入自己的SQL语句。 结果窗格显示当前查询检索的数据网格。可以通过编辑该网格单元格中的值对数据库进行修改,而且可以添加或删除行。 可以用不同的方法指定要显示的列:在关系图窗格中选择显示列,或者在条件窗格中输入该列,或者在SQL窗格中使其成为SQL语句指定输出列。 本例查询教师表中的全部教师的编号、姓名和所在系。 在查询生成器的条件窗格的“输出”列中取消了“教研组”,在“筛选器”列对应的“系”行格中输入“计算机”(自动设置为=计算机),按回车键。,设置完成后,可以看到SQL窗口生成以下查询语句: SELECT 教师号,教师姓名,系 FROM 教师 WHERE (系= 计算机) 单击“执行查询”按钮,从结果窗口可看到查询结果。效果如图10.28所示。, 查询设计完成,单击“确定”按钮,返回“TableAdapter配置向导”对话框,单击“完成”按钮。, 返回窗体设计视图,可以看到,IDE在窗体自动生成生成一个“FillBy_计算机系ToolStrip”的控件。 还生成了执行“教师TableAdapter.FillBy_计算机系”查询方法的事件过程。 打开Form.vb文件,可以查阅到以下代码。,Private Sub FillBy_计算机系ToolStripButton_Click _ (ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles FillBy_计算机系ToolStripButton.Click Try Me.教师TableAdapter.FillBy_计算机系(Me.教务DataSet.教师) Catch ex As System.Exception System.Windows.Forms.MessageBox.Show(ex.Message) End Try End Sub, IDE生成的显示数据表的基本查询是由Form1_Load事件过程执行的。 为了可在程序运行后反复显示全部记录,添加一个按钮Button1,Txet属性为“显示全部教师”。建立按钮单击事件过程。,Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles Button1.Click Me.教师TableAdapter.Fill(Me.教务DataSet.教师) End Sub, 生成、运行项目,效果如图10.29所示。,在上述例程中,查询条件关键字“计算机系”不是数据表的主键,所以查询结果不是一个记录而是一组记录。通常称之为分类。 这种分类方式是数据库已经定义好的。 例如,本例中的“系”。 对于这样的查询,应用程序可以提供一个标准化的选择。,例10-6,按系分类查询教师表。,操作系统: 创建名为“按系查询教师”的Windows窗体应用程序。 添加数据源教务数据库。选择数据库对象为“教师”表。 将“教师”表节点拖放到窗体中,生成数据绑定组件和显示数据表控件。 打开“教务DataSet.xsd”数据库设计视图,为“教师TabelAdapter”添加以下查询。 方法:FillBy_计算机 语句:SELECT 教师号,教师姓名,系,教研组 FROM 教师 WHERE (系= 计算机),方法:FillBy_机电 语句:SELECT 教师号,教师姓名,系,教研组 FROM 教师 WHERE (系= 机电) 方法:FillBy_土木工程 语句:SELECT 教师号,教师姓名,系,教研组 FROM 教师 WHERE (系= 土木工程) 方法:FillBy_外语 语句:SELECT 教师号,教师姓名,系,教研组 FROM 教师 WHERE (系 = 外语) 方法:FillBy_应用化学 语句:SELECT 教师号,教师姓名,系,教研组 FROM 教师 WHERE (系= 应用化学), 在窗体上添加一个标签Label1,Text属性为“选择”; 添加一个组合框ComboBox1,Items(集合)为:全部,计算机,机电,土木工程,电信工程,外语,应用化学。 编写以下事件过程。,置组合框的初始选择状态 Private Sub Form1_Load(ByVal sender As _ System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load ComboBox1.SelectedIndex = 0 End Sub,根据组合框选择调用不同的查询方法 Private Sub ComboBox1_SelectedIndexChanged(ByVal sender _ As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged Select Case ComboBox1.SelectedIndex Case 0 Me.教师TableAdapter.Fill(Me.教务DataSet.教师) Case 1 Me.教师TableAdapter.FillBy_计算机(Me.教务DataSet.教师) Case 2 Me.教师TableAdapter.FillBy_机电(Me.教务DataSet.教师) Case 3 Me.教师TableAdapter.FillBy_土木工程(Me.教务DataSet.教师) Case 4 Me.教师TableAdapter.FillBy_电信工程(Me.教务DataSet.教师) Case 5 Me.教师TableAdapter.FillBy_外语(Me.教务DataSet.教师) Case 6 Me.教师TableAdapter.FillBy_应用化学(Me.教务DataSet.教师) End Select End Sub,如果查询条件是数据表的主键,查询结果就只有一个记录,称为精确查询。,例10-7,用户输入教师姓名,查询指定教师信息。,操作步骤: 创建名为“查找教师”的Windows窗体应用程序。 添加数据源教务数据库。选择数据库对象为“教师”表。 将“教师”表节点拖放到窗体中,生成数据绑定组件和显示数据表控件。, 打开“教务DataSet.xsd”数据库设计视图,为“教师TableAdapter”添加一个查询方法“FillBy_姓名”。 查询语句: SELECT 教师号, 教师姓名, 系, 教研组 FROM 教师 WHERE (教师姓名 = ?) 这将生成一个带两个参数的查询方法,第一个参数是DataSet对象的数据表,第二个参数是查询条件的值。 例如: Me.教师TableAdapter.FillBy_姓名(Me.教务DataSet.教师, NameString) 它的作用是把教师表中“教师姓名”字段的值等于NameString的所有记录写入“教师Tabel Adapter”中。 查询条件的值可以从控件输入中获取。 本例是由一个文本框输入,即条件参数的实际值是文本框的Text属性值,, 在窗体上建立一个标签Label1,Text属性为“输入教师姓名:”; 建立一个文本框TextBox1,用于输入教师姓名。 建立一个命令按钮Button1,Text属性为“显示全部教师”。 编写事件过程:,输入教师姓名 Private Sub TextBox1_KeyDown(ByVal sender As System.Object, ByVal e As _ System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown If e.KeyCode = Keys.Enter Then Me.教师TableAdapter.FillBy_姓名(Me.教务DataSet.教师, TextBox1.Text) End If End Sub 显示教师表全部记录 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles Button2.Click Me.教师TableAdapter.Fill(Me.教务DataSet.教师) End Sub,2模糊查询,模糊查询是指查询条件与数据表的字段只需部分匹配而不需要完全匹配。,例10-8,操作步骤: 创建名为“模糊查询”的Windows窗体应用程序,窗体的Text属性为“查询教师表”。 添加数据源教务数据库。选择数据库对象为“教师”表。 将“教师”表节点拖放到窗体中,生成数据绑定组件和显示数据表控件。 打开“教务DataSet.xsd”数据库设计视图,为教师表添加一个名为“FillBy_梁姓教师”的方法,查询语句为: SELECT 教师号,教师姓名,系,教研组 FROM 教师 WHERE (教师姓名 LIKE 梁%),从教师表中查找全部姓梁的教师信息。, 在窗体上建立两个按钮Button1和Button2,其Text属性分别为“显示全部教师”和“显示梁姓教师”。 编写以下事件过程。,显示教师表全部记录 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Me.教师TableAdapter.Fill(Me.教务DataSet.教师) End Sub 执行查询方法,显示梁姓教师记录 Private Sub Button2_Click(ByVal sender A