第10章 ADO数据库编程 本章要点: ADO的概念及其对象组成 ADO各对象的作用 利用ADO连接到各种数据库的方法
10.1 ADO对象模型概述 10.1.1 ADO的概念 ADO(ActiveX Data Object)是DAO/RDO的后继产物,是微软最新的数据访问组件(微软数据访问组件简称MDAC)的一部分,MDAC的常用版本有MDAC 2.5和MDAC 2.7,ADO的最新的版本ADO.NET也包含在MDAC 2.7中。 ADO是基于OLE DB之上的面向对象的数据访问模型,OLE DB是Microsoft开发的一种高性能的、基于COM的数据访问技术,其作用是向应用程序提供一个统一的数据访问方法,而不需要考虑数据源的具体格式和存储方式。
10.1.2 ADO模型的对象
1.基本对象 (1)Connection对象 (2)Recordset对象 (3)Command对象 (4)Field对象 (5)Property对象 (6)Parameter属性 (7)Error对象 2.集合对象 (1)Errors集合对象 (2)Parameters对象 (3)Fields对象 (4)Properties对象 3.事件 (1)ConnectionEvents类事件 (2)RecordsetEvents类事件
10.1.3 ADO模型的编程模型 ADO提供的对象可以完成以下活动: (1)连接到数据源,主要使用Connection对象。可选择开始一个事务。 (2)执行SQL命令,使用Command对象。 (3)可选择在SQL命令中指定列、表和值作为变量参数,主要使用Parameter对象。 (4)执行命令,主要使用Command、Connection或Recordset对象。 (5)如果命令是以按行返回的记录集,则将行存储在缓存中,主要使用Recordset对象。 (6)可选择创建缓存视图,以便能对数据进行排序、筛选和定位,主要使用Recordset对象。
(7)对记录集中的数据进行添加、删除或更改操作,主要使用Recordset对象。 (9)在使用事务之后,可以接受或拒绝在事务期间所作的更改,结束事务,主要使用Connection对象及事务处理方法。
10.2 Connection对象 使用Connection对象的集合、方法和属性可执行下列操作: (1)在打开连接前使用ConnectionString、ConnectionTimeout和Mode属性对连接进行配置。 (2)设置CursorLocation属性以便调用支持批更新的“客户端游标提供者”。 (3)使用DefaultDatabase属性设置连接的默认数据库。(4)使用IsolationLevel属性为在连接上打开的事务设置隔离级别。 (5)使用Provider属性指定OLE DB提供者。 (6)使用Open方法建立到数据源的物理连接。使用Close方法将其切断。 (7)使用Execute方法执行对连接的命令,并使用CommandTimeout属性对执行进行配置。
(8)可使用BeginTrans、CommitTrans和RollbackTrans方法以及Attributes属性管理打开的连接上的事务(如果提供者支持则包括嵌套的事务)。 (9)使用Errors集合检查数据源返回的错误 (10)通过Version属性读取所使用的ADO执行版本。 (11)使用OpenSchema方法获取数据库纲要信息。
10.2.1 Connection对象的常用属性 1.Attributes属性 2.CommandTimeout属性 3.ConnectionString属性 4.ConnectionTimeout属性 5.CursorLocation属性 6.DefaultDatabase属性 7.IsolationLevel属性 8.Mode属性 9.Provider属性 10.State属性 11.Version属性
10.2.2 Connection对象的常用方法 1.BeginTrans方法格式如下: level = Connection.BeginTrans() 或 Connection.BeginTrans 2.CommitTrans方法格式如下: Connection.CommitTrans 3.RollbackTrans方法格式如下: Connection.RollbackTrans 4.Open方法语法格式如下: connection.Open ConnectionString, UserID, Password, OpenOptions
5.Close方法使用格式如下: Connection.Close 6.Execute方法 格式1:connection.Execute CommandText, RecordsAffected, Options 格式2: Set recordset = connection.Execute (CommandText, RecordsAffected, Options) 7.Cancel方法 8.OpenSchema方法
10.2.3 连接到数据库的方法 1.通过DSN建立连接 【例10-1】在第7章建立了两个DSN,分别是jiaoxue和SQLPubs,请编写一个连接到这两个DSN的程序。程序的设计界面如图10-4所示。然后执行时,单击“建立到SQLPubs的连接”将建立与SQLPubs DSN的连接,单“建立到jiaoxue DSN的连接”将建立与jiaoxue DSN的连接。 题意分析:为建立连接,可先给Connection对象的ConnectionString属性赋值为需要建立连接的参数,然后执行Connection对象不带参数的Open方法,也可在调用Connection的Open方法时指定连接字符串。此题需注意连接到SQL DSN和连接到Microsoft Access DSN的区别。
2.直接使用数据库文件名称或数据源名称建立连接 (1)使用SQL Server普通安全模式建立到Pubs数据库的连接 (2)SQL Server信任安全模式建立到Pubs数据库的连接 【例10-2】直接建立到SQL Server 2000的数据库“Pubs”的连接和到当前目录下的Microsoft Access数据库“教学”的连接。程序的设计界面如图10-5所示。运行时单击“建立到SQL Pubs数据库的连接”将以两种方法建立到SQL Server数据库Pubs的连接,单击“建立到Access教学数据库的连接”将以两种方式建立到Access数据库“教学”的连接。
10.2.4 通过打开的连接执行SQL语句 【例10-3】通过Connection的Execute方法来执行SQL语句,为当前目录下的“教学”数据库中的“学生表”添加一条记录,记录的“学号”和“姓名”值分别为“0001020”和“周小华”。 题意分析:先采用直接使用数据库名的方法连接到Access数据库“教学”,然后通过调用Connection的Execute方法来执行SQL-Insert语句。
(b)执行后 (a)执行前
10.3 RecordSet对象 10.3.1 Recordset对象简介 在ADO中定义了四种不同的游标类型: (1)动态游标 (2)键集游标 (3)静态游标 (4)仅向前游标 10.3.2 Recordset对象的属性 1.AbsolutePage、PageCount与PageSize属性 2.AbsolutePosition和RecordCount属性 3.ActiveConnection属性 4.CacheSize属性
5.CursorLocation属性 6.CursorType属性 7.EditMode属性 8.Filter属性 9.LockType属性 10.MaxRecords属性 12.Sort属性 13.Source属性 14.State属性
10.3.3 Recordset对象的方法 1.Cancel方法 该方法的使用格式如下: Object.Cancel 2.CancelUpdate方法 该方法的使用格式如下: Recordset.CancelUpdate 3.CancelBatch方法 该方法的使用格式如下: Recordset.CancelBatch AffectRecords 4.NextRecordSet方法该命令的格式如下: SetRecordset2= Recordset1.NextRecordset( RecordsAffected )
5.Open方法 Open方法的使用格式如下: Recordset.OpenSource,ActiveConnection,CursorType, LockType, Options 6.Resync方法 该方法的使用格式如下: Recordset.Resync AffectRecords, ResyncValues 7.Save方法 该方法的使用格式如下: Recordset.Save FileName, PersistFormat 8.UpdateBatch方法 该方法的使用格式如下: Recordset.UpdateBatch AffectRecords 9.GetRows方法 调用格式如下: Array=Recordset.GetRows() 10.Supports方法 该方法的使用格式如下: boolean = Recordset.Supports( CursorOptions )
10.3.4 访问Recordset对象字段的方法
10.3.5 Recordset对象应用实例 【例10-4】使用ADO的Recordset对象把当前目录下的“教学”数据库中的“学生表”中的数据显示出来。程序设计界面如图10-7(a)所示。程序刚运行时,只有“连接”按钮可用,单击该按钮,将建立到当前目录下的“教学”数据库的连接,然后“连接”按钮不可用,“显示”按钮可用。单击“显示”按钮,将把“学生表”中的数据显示在MsFlexGrid控件中,同时“显示”按钮不可用,“关闭”按钮可用,如图10-7(b)所示。单击“关闭”按钮,将关闭记录集和连接并结束程序。
题意分析:本题要用MsFlexGrid控件显示表的内容,而MsFlexGrid控件并不是VB的标准控件,应该首先把它加载到VB的工程中,加载的方法是执行【工程】→【部件】命令,在出现的部件对话框中选中“Microsoft FlexGrid Control 6.0”后按“确定”按钮。要在MSFlexGrid控件中显示数据表中的内容,可通过循环把表中的各字段的内容依次赋值到MsFlexGrid的MatrixText属性中。
10.4 Command对象 10.4.1 Command对象简介 Command对象定义了将对数据源执行的指定命令。通过Command对象可以执行SQL语句、数据库中的存储过程等,虽然Connection对象的Execute方法也能够执行SQL语句,但Command对象还提供了参数化查询等专门的运行方式。 利用Command对象可以查询数据库中的记录以形成记录集,还可以更改数据库的结构。但由于数据提供者提供的功能不同,在引用某些Command集合、方法或属性时可能会产生错误,需要使用者查询相应的参考书籍。
10.4.3 Command对象的常用方法1.Cancel方法 1.ActiveConnection属性 2.CommandText属性 3.CommandTimeout属性 4.CommandType属性 5.Prepared属性 6.State属性 10.4.3 Command对象的常用方法1.Cancel方法 2.Execute方法
10.4.4 Command对象应用实例 【例10-5】已知“教学管理”数据库位于当前目录下,请使用Command对象查询出自动化专业的全部学生的学号、姓名和年级,并调用例10-4中的ShowData方法把查询结果显示出来。程序设计界面如图10-8(a)所示。程序刚运行时,只有“连接”按钮可用,单击该按钮,将建立到当前目录下的“教学管理”数据库的连接,然后“连接”按钮不可用,“显示查询结果”按钮可用。单击“显示查询结果”按钮,将把查询结果的数据显示在MsFlexGrid控件中,同时“显示查询结果”按钮不可用,“关闭”按钮可用,如图10-8(b)所示。单击“关闭”按钮,将关闭记录集、连接并结束程序。
题意分析:可使用Command对象的Execute方法执行查询得到结果记录集,处理的一般步骤如下: (1)设置Command对象的ActiveConnection属性为所需要的连接对象名; (2)设置Command对象的CommandText属性为要执行的查询字符串; (3)设置Command对象的CommandType属性为要执行的命令类型; (4)调用Command对象的Execute方法执行查询(若是返回记录集的查询,可把结果赋值给一个记录集对象变量)。
【例10-6】给当前目录中的“教学”数据库中的“教师表”添加一条记录,记录值为{‘05003’,‘杨权’,‘女’,#09/22/69#,‘讲师’,‘计算机学院’,3855.50}。要求使用Command对象。程序的运行界面如图10-9所示,程序运行时单击“连接并显示”命令将把“教师表”中的当前数据显示出来,如图10-9(a)所示,单击“插入并显示”将显示插入一条记录后的“教师表”信息,如图10-9(b)所示。 题意分析:可通过Command对象来执行一条SQL-INSERT命令,从而可以插入一条记录到相应的表中。在插入前和插入后把该表的内容分别显示出来以观察程序的运行结果。
10.5 Field对象和Fields集合 10.5.1 Field对象的常用属性 1.ActualSize属性 2.Attributes属性 3.DefinedSize属性 4.Name属性 5.NumericScale属性 6.OriginalValue属性 7.Precision属性 8.Type属性 9.UnderlyingValue属性 10.Value属性
10.5.2 Field对象的常用方法 10.5.3 Fields对象的常用属性 1.AppendChunk方法 该方法的使用格式如下: Field.AppendChunk Data 2.GetChunk方法 该方法的使用格式如下: variable = field.GetChunk( Size ) 10.5.3 Fields对象的常用属性 Fields对象是Field对象的集合,它有一个属性Count,该属性用来返回Fields对象中包含的Field对象个数。如果Count属性为零,集合中将不存在对象。Field集合对象的每个成员都有一个编号,从0开始,以Count属性值减1结尾。
10.5.4 Fields对象的常用方法 1.Append方法 该方法的语句格式如下: fields.Append Name, Type, DefinedSize, Attrib 2.Delete方法 该方法的使用格式如下: Fields.Delete Field 3.Item方法 使用格式如下: Set Field = Fields.Item ( Index ) 【例10-7】编写一个程序,用来显示“教学”数据库中的“教师表”中的字段信息。程序设计界面如图10-10(a)所示。程序运行时,在列表框中将显示出“教师表”的所有字段名,当在列表框中选中相应的字段时,该字段的长度、类型和字段值将分别显示在相应的文本框中,如图10-10(b)所示。
题意分析:在Form_Load事件中,建立到“教学”数据库的连接并创建以“教师表”为基础的Recordset对象,然后通过一个循环把Fields集合中每个Field对象的Name属性添加到列表框中。程序运行时,当发生List1的Click事件时,将选中字段的属性DefinedSize、Type、Value值分别赋给相应的文本框的Text属性。
10.6 Error对象和Errors集合 10.6.1 Error对象的常用属性 1.Description属性 2.NativeError属性 3.Number属性 4.Source属性 5.SQLState属性 10.6.7 Errors对象的常用属性与方法 Clear方法的使用格式如下: Errors.Clear
10.7 利用ADO Data控件进行数据库编程 10.7.1 ADO Data控件简介 1.添加ADO Data控件 添加方法是:执行【工程】→【部件】命令,将出现的“部件”对话框,在该对话框中选中“Microsoft ADO Data Control 6.0(OLEDB)”后按“确定”按钮。 2.ADO Data控件的主要功能 (1)连接到一个本地数据库或远程数据库。 (2)从指定的数据库表或视图中提取记录构成记录集,或通过执行一个基于结构化查询语言(SQL)的查询来构成记录集,或执行存储过程来构成记录集。 (3)将字段的数值传递给数据绑定控件,可以在这些控件中显示或更改字段值。 (4)添加新的记录,或根据对显示在数据绑定控件中的数据的更改来更新一个数据库。
10.7.2 ADO Data控件的属性窗口 1.“通用”属性页 建立连接字符串有三种方式,分别如下: (1)使用Data Link文件 (2)使用ODBC数据源名称 (3)使用连接字符串 2.“身份验证”属性页 3.“记录源”属性页
10.7.3 ADO Data控件的常用属性 1.ConnectionString属性 2.UserName属性 3.Password属性 4.RecordSource属性 5.CommandType属性 6.CursorLocation属性 7.CursorType属性 8.LockType属性 9.Mode属性 10.MaxRecords属性 11.ConnectionTimeout属性 12.CacheSize属性 13.BofAction、EofAction属性
10.7.4 ADO Data控件的常用事件 1.WillMove事件 2.MoveComplete事件 3.WillChangeField事件 4.FieldChangeComplete 5.WillChangeRecord事件 6.RecordChangeComplete事件 7.WillChangeRecordset事件 8.RecordsetChangeComplete事件 9.InfoMessage事件
10.7.5 常用的与ADO Data控件绑定使用的数据绑定控件 (2)设置该控件的ConnectionString属性以连接到数据库; (3)设置RecordSource属性以决定检索什么信息; (4)设置CommandType属性以告诉提供者命令的类型; (5)设置CursorType属性以决定游标的类型; (6)根据需要再设置ADO Data控件的其它属性; (7)在窗体上放置数据绑定控件; (8)设置数据绑定控件的DataSource属性为ADO Data控件名; (9)设置数据绑定控件的DataField属性为记录集中的某个字段名; (10)编写事件过程对程序进行控制。
10.7.6 使用ADO Data控件创建数据库应用程序示例 【例10-9】把当前目录下的“教学”数据库中的“学生表”信息显示在一个DataGrid控件中。要求使用ADO Data控件。 题意分析:ADO Data控件与DataGrid控件均不是VB工具箱中的控件,需要把它们加载进工程,加载的方法前面已经说明。在工程中绘制ADO Data控件和DataGrid控件,界面设置如图10-18(a)所示。
图10-18 例10-9程序设计界面与运行界面
10.8 ADO开发实例 【例10-10】编写一个程序,对“教学”数据库中“教师表”的工资信息进行修改,从而实现加工资的功能。加工资的方法是:所有人的工资增加10%。要求使用ADO方式并把对工资的修改作为一个事务,最后通过对话框确认事务提交或撤消。 题意分析:首先要建立对“教学”数据库的连接,然后调用连接的BeginTrans方法开始一个事务,调用连接的Execute方法执行一个SQL-Update语句对工资进行修改,然后可通过一个消息框询问用户是否保存对工资的修改,如果回答“是”,则提交事务,确认对工资的修改,如果回答“否”,则撤消对工资的修改。
【例10-11】编写一个对“教学”数据库中的“课程表”进行维护的程序,程序的设计界面如图10-19所示。界面上的文本框用来显示当前记录的内容,界面上的按钮用来执行对记录集的相应操作。要求:(1)只有在添加记录和修改记录时,才能向文本框中输入内容。(2)执行相应操作时,按钮的状态要发生变化。如记录指针移到了首记录,“首记录”和“前移”按钮不能使用;单击“添加”按钮后,所有的移动按钮、“删除”按钮、“添加”和“修改”按钮均不可用等等。(3)使用ADO编程。
小结 ADO(ActiveX Data Objects)是Microsoft最新的数据访问接口,通过它可以访问多种类型的数据库。ADO由七个基本对象组成,这七个基本对象分别是Connection、Recordset、Command、Field、Property、Parameter和Error,另外它还包含Errors、Parameters、Fields、Properties四S个集合对象。使用ADO进行编程的一般步骤是:首先使用Connection建立与数据库的连接,然后通过执行Recordset对象的Open(或Execute)方法或Command对象的Execute方法产生一个记录集,然后就可以对记录集对象进行具体的数据操作了。本章详细介绍了Connection、Recordset、Command、Field和Error对象的属性和方法,并通过实例详细地解析了这些对象的使用方法。另外本章还介绍了ADO Data控件的属性和方法,并对利用ADO Data控件和数据绑定控件进行数据库编程进行了详细的解析。