第九章,ADO.NET数据库编程知识点:
数据库的基本概念
SQL语言
ADO.NET数据库访问技术
ADO.NET数据库访问常用组件
Visual Basic.NET具有丰富的数据库功能,可对多种数据库进行读写操作,用户可以通过 Visual Basic.NET编程实现创建、读取、修改如 Access,SQL
Server,Orical等数据库的操作。 Visual Basic.NET在数据库程序设计方面,
是使用 ADO.NET作为访问数据库的接口,本章将讨论如何通过 ADO.NET操作数据库。
9.1 数据库的概念
1,数据库系统( DBS)和数据库管理系统( DBMS)
数据库( Database System,简称 DBS)是指按照一定结构和规则组织起来的相关数据的集合,是存放数据的“仓库”。
其特点是具有较小的数据冗余,较高的数据独立性,较可靠的安全控制机制,可供多个用户共享,可降低应用程序的开发代价和维护代价,能够保证数据的安全、可靠。
数据库管理系统( Database Management System,简称 DBMS)是位于用户与操作系统之间的一层数据管理软件,DBMS的功能是科学地组织和存储数据、高效地获取和维护数据。目前大多数数据库管理系统都是基于关系模型的关系数据库。由于关系数据库建立在严格的数学基础之上,并且结构简单,使用方便,因而得到广泛应用。关系数据库中的数据的基本结构是表,即数据是按行、列有规则的排列和组织。
2,建立一个合理的数据库
( 1),实现根据系统需要建立合适的数据表
( 2),建立数据库例 创建名为,sales”的数据库。
具体步骤如下:
( 1)执行 【 开始 】 |【 程序 】 |【 Mirosoft SQL Server】 |【 企业管理器 】 命令,打开 SQL Server。
( 2)单击根目录向下展开至数据库为止。
( 3)在数据库这个节点,单击“数据库”按扭,从快捷菜单执行“新建数据库”命令,如图所示。
( 4)弹出“数据库属性”对话框,在“名称文本框”,输入,sales”,如图所示。
( 5)切换到“数据文件”选项卡,在“位置”字段,选择要存放数据库文件的位置。
如图所示。
( 6)单击“确定”按钮,SQL Server建立好,sales”数据库,如图所示。
( 7)展开“数据库”节点,展开相应数据库,在数据库的“表”节点上右击,
从快捷菜单中执行“新建表”命令,如图所示。
( 8)出现“表结构”设计界面,根据前面介绍的 sales clerk表来建立表,并将
salesclerkID设为主键,如图所示
( 9)重复步骤( 7)、( 8),依次建立产品表( products)、顾客表
( customers)、订单表( orders)。在订单表( orders)中,销售员 ID、产品 ID、
顾客 ID联合设为主键。
至此,已建立了,sales”数据库,并在数据库中建立了,sales clerk”、
,products”、,customers”、,orders”表,如图所示。
( 10)创建表之后,接下来的就是向表中添加记录。
有了数据库数据后,可以使用 SQL Server 2000提供的相关工具对数据进行查询、修改、删除及数据维护、备份等操作,但更关心的是 VB.NET应用程序是如何访问数据库的数据。 VB.NET提供了 ADO.NET连接数据库,并使用
SQL( Structured Query Language,结构化查询语言)完成数据库管理与访问。
9.2 SQL语法结构化查询语言( SQL)是关系数据库的标准查询语言,SQL是当前各类型数据库中最为通用的数据库访问语言。当用户想要检索数据库中的数据时,就通过 SQL语言发出请求,接着 DBMS对该 SQL请求进行处理并检索所要求的数据,最后将其返回给用户,此过程被称作为数据库查询,这也就是数据库查询语言这一名称的由来。 SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照 ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言,它是操作关系数据库的重要的工具。
对所有可用的 SQL特性介绍超出了本书范围,在这里只是教如何使用 SQL及最普通的 SQL命令。
9.2.1 数据查询( select)
SQL是一种查询功能很强的语言,只要是数据库存在的数据,总能通过适当的方法将它从数据库中查找出来。 SQL中的查询语句只有一个 ——
SELECT。在众多的 SQL命令中,SELECT语句应该算是使用最频繁的。
SELECT语句主要被用来对数据库进行查询并返回符合用户查询标准的结果数据。它可与其他的语句配合完成所有的查询功能。 SELECT语句的完整语法如下:
SELECT 表的列名或列表达式集合
FROM 表集合
[WHERE 条件表达式 ]
[GROUP BY 列名集合 [HAVING组条件表达式 ]]
[ORDER BY 列名 [集合 ]…]
整个语句的语义如下:从 FROM子句列出的表中,选择满足 WHERE 子句给出的条件表达式的记录,然后按 GROUP BY子句(分组子句)中指定列的值分组,再提取满足 HAVING子句中组条件表达式的那些组,按 SELECT子句给出的列名或列表达式求值输出。 ORDER子句(排序子句)是对输出的目标表进行重新排序,并可以附加说明 ASC(升序)或 DESC(降序)排列。
9.2.2 数据插入( insert)
INSERT语句完成的功能是向表中添加一条新的记录,其语法格式如下:
INSERT INTO 表名(字段 1,字段 2,… 字段 m) values(值 1,值 2,…
值 m)
其中,字段 1~字段 m是本条记录中要设置的字段名,对于未进行设置的字段,其值将为空。
当向数据库表中添加新记录时,首先,在关键词 INSERT INTO后面输入所要添加的表格名称;然后,在括号中列出将要添加新值的列的名称;最后,
在关键词 VALUES的后面按照前面输入的列的顺序对应的输入所有要添加的记录值。
当插入的是整个行的数据时,列名可以省略。但 VALUES关键字后的数据必须与表中字段顺序及数据类型完全一致
9.2.3 数据修改( update)
UPDATE语句用于实现对数据库中数据的修改,其语法如下:
UPDATE 表名 SET 字段 1=值 1,字段 2=值 2,… 字段 m=值 m [WHERE
限制条件 ]
其中,WHERE子句用来指明哪些记录需要进行修改,如果没有 WHERE
子句,则表示修改表中的所有记录。
9.2.4 数据删除( delete)
要从数据表中删除一条记录,可以使用 DELETE 语句,其语法格式如下:
DELETE FROM 表名 [WHERE 限制条件 ]
当需要删除某一行或某个记录时,首先,在 DELETE FROM关键词之后输入表格名称,然后,在 WHERE从句中设定删除记录的判断条件。
9.3 ADO.NET数据库访问技术简介
ADO.NET是一组向,NET程序员公开数据访问服务的类。 ADO.NET
为创建分布式数据共享应用程序提供了一组丰富的组件。它提供了对关系数据,XML和应用程序数据的访问,因此是,NET Framework中不可缺少的一部分。 ADO.NET支持多种开发需求,包括创建由应用程序、工具、
语言或 Internet浏览器使用的前端数据库客户端和中间层业务对象。
以前,数据库访问主要依赖于双层结构,并且是基于连接的。连接断开,数据就不能再存取。现在,数据处理被延伸到三层以上的结构,
相应地,程序员需要切换到无连接的应用模型。程序员正在向断开方式转换,以便为它们的应用程序提供更佳的可缩放性。 ADO.NET借用 XML
的力量来提供对数据的断开访问,这样在作数据处理的同时,不用一直和数据库连接而发生一直占用系统资源的现象。
9.4 ADO.NET主要组件
ADO.NET将访问数据和处理数据的部分分开,使得程序的设计也可以将这两部分分离。因此将 ADO.NET架构分成,NET Data Provide(数据源提供程序)和 DataSet数据集(数据处理的核心)两大部分,如图所示。
9.4.1,NET Data Provider
ADO.NET依靠,NET数据提供程序的服务。它们提供了对底层数据源的访问,
包括四个主要对象( Connection,Command,DataReader和 DataAdapter)
Connection:在 ADO.NET 中,使用 Connection 对象连接一个指定的数据源。
Command:连接到数据源后,能够使用 Command 对象执行命令和返回结果。
DataAdapter:连接数据库,执行查询并填充 DataSet。当 DataAdapter 调用
Fill 或 Update 方法时,在后台完成所有的数据传输。
DataReader:通过 Command对象执行 SQL查询命令获取数据流,以便进行高速、只读的数据浏览功能
9.4.2 DataSet
DataSet是 ADO.NET断开连接体系结构中主要的数据存储工具。填充
DataSet时,并非通过 Connection 对象将 DataSet直接连接到数据库。
必须创建一个 DataAdapter来填充 DataSet。 DataAdapter连接数据库,
执行查询并填充 DataSet。一个 DataSet代表一组完整的数据,包括表格、约束条件和表关系。 DataSet能够存储代码创建的本地数据,也能存储来自多个数据源的数据,并断开到数据库的连接。
在 Dataset内部允许同时存放一个或多个数据表( DataTable)对象。
DataSet可以用于访问多个不同的数据源,XML数据或者作为应用程序缓存系统状态的缓存区。
9.5 ADO.NET数据库连接与访问在 Visual Basic.Net集成开发环境下,提供和数据库连接有下列两种方法:
使用数据工具。
编写代码。
9.5.1 使用数据工具创建数据库应用程序
1.服务器资源管理器通过执行菜单 【 视图 】 |【 服务器资源管理器 】 命令显示服务资源管理器工具栏,其位于 IDE的左部,如图所示
(1) 在服务器资源管理器窗口中右击“服务器”,从快捷菜单中执行 【 添加服务器 】
后,弹出如图所示的对话框在“计算机”文本框中输入要连接的服务器名称或服务器的 IP地址。
单击“确定”按钮后,新的服务器出现在“服务器”节点下。
(2) 右击“数据连接”,在弹出的快捷菜单中执行 【 添加连接 】 命令,弹出“数据链接属性”对话框,如图所示选择或输入服务器的名称后,指定服务器的登录方式,选择服务器上的数据库,单击“测试连接”按钮,可测试是否连接成功,如果成功,将弹出如下对话框。
2,使用 Data Form Wizard
( 1)从“解决方案资源管理器”选择目标项目右击,执行 【 添加 】 |【 添加新项 】 命令,打开“添加新项”对话框。
( 2)选择“数据窗体向导”图标,弹出“数据窗体向导”对话框,
( 3)单击“下一步”按扭,进入下一个对话框,
( 4)再“创建一个数据集,名称为”文本框中输入 customer,单击“下一步”按钮,进入下一个对话框,
( 5)在该对话框中,用户可以在“向导将使用哪种连接”下拉列表框中选择,现在选择一个已经存在的可用的连接。若要更改,可单击“新建连接”按钮,遵循前面所讲步骤创建新的连接。选择连接后,单击“下一步”按钮,进入下一个对话框,
( 6)在如图所示对话框中用户可以选择表,这里选择 customers,单击“下一步”按钮,进入下一个对话框
( 7)在如图所示的对话框中,用户可以选择要显示的列。这里选择所有列,单击“下一步”按钮,进入下一个对话框
( 8)在如图所示的对话框中,用户可以选择数据显示的样式。“网格中的所有记录”,
指用 DataGrid控件显示全部记录;“单个控件中的单个记录”,指每次只显示一条记录。
在此选择“网格中的所有记录”,单击“完成”按钮,完成数据窗体的设置。这时,窗体就添加了若干控件,便于对数据库进行操作,
( 9)运行程序,并单击“加载”按钮,可以看到 customers表中的所有数据。执行 【 更新 】 或 【 全部取消 】 命令可以完成相应的数据库操作
9.5.2 使用 ADO.NET对象
1.运用 Connection对象打开、关闭数据库的连接应用 Connections对象时,先用 Connections对象建立连接,然后调用 Open方法来打开连接。通常建立连接时,要提供一些信息,如数据库所在位置、数据库名称、用户账号、密码等相关信息,Connection对象提供了一些常用属性用来进行此类设置
2.使用 Command和 DataReader对象当建立与数据源的连接后,可以使用 Command 对象来执行命令并从数据源中返回结果。 Command 对象公开了几个可用于执行所需操作的 Execute 方法。
当以数据流的形式返回结果时使用 ExecuteReader 可返回 DataReader 对象。
使用 ExecuteScalar 可返回单个值。使用 ExecuteNonQuery 可执行不返回行的命令。
方 法 描 述
Fill 执行 selectcommand命令,用数据源的数据填充 dataset对象
FillSchema 使用 selectcommand提取数据源中表的架构,并根据 dataset对象中相应的限制条件创建一个空表
Update
对 dataset对象中每个插入行,更新行或删除行分别调用
insertcommand,updatecommand,deletecommand,以便将
dataset中更改的内容更新到初始的数据源中
3.使用 DataAdapter和 DaterSet对象
DataAdapter类常用方法
9.6 ADO.NET数据库绑定与浏览
9.6.1 数据库绑定数据绑定指的是数据源和数据使用者之间的一种关系。数据源被连接到数据使用程序,数据使用程序接收数据,处理数据并显示数据。在,Net Framwork所提供的大部分控件皆有数据绑定功能。例如 Label,TextBox,DataGrid等控件。
当空间做数据绑定的操作后,该控件即会显示所查询的数据记录。
使用 Label,TextBox,Button,CheckBox,RadioButton。
控件做数据绑定,一次只能在该控件上面显示一条记录的某个字段的内容。此种数据绑定的语法如下:
控件对象名称,DataBindings.Add(“属性”,“数据源”,“数据成员”)
属性:指定所要绑定的控件属性。
数据源:指定 DataSet,DataTable等对象数据源。
数据成员:指定要绑定的数据源字段。
使用 ComboBox,ListBox,CheckedListBox控件作数据绑定,可以显示所有记录的某一字段数据,数据绑定语法如下。
控件对象名称,DataSource=数据源控件对象名称,DisplayMember=数据成员(数据源字段)
使用 DataGridView控件做数据绑定 可以显示所有记录的所有字段,数据绑定语法如下。
控件对象名称,DataSource=数据源控件对象名称,DataMember=数据成员(数据表)
9.6.2 实现对数据记录的浏览在完成对窗体中的 WinForm组件进行绑定过以后,实现对数据记录的浏览操作的关键就是要找到如何定位数据记录指针的方法。而要实现这种处理就需要用到,Net
FrameWork SDK中的名称空间 System.Windows.Froms中的 BindingManagerBase
类了,BindingManagerBase是一个抽象的类,主要管理对于绑定同一数据表所有绑定对象。 BindingManagerBase类中定义了两个属性,Position”和,Count”,第一个属性 Position是定义当前数据指针,而第二个属性 Count主要是得到当前数据集有多少记录数目。在已经进行完数据绑定后,通过这二个属性的配合使用,实现对数据记录的浏览。那么如何创建一个属于自己的 BindingManagerBase对象,这就要使用到另外一个类 —— BindingContext。其实对于那些属于从 Control类中继承对象的
BindingManagerBase都是由 BindingContext来创建的。