北华航天工业学院计算机系制作VC++程序设计项目实践贾振华北华航天工业学院计算机系制作单击此处编辑母版标题样式第9章商品销售管理系统学习目标:商品销售管理系统的设计思路与开发流程使用VC++进行数据库连接使用ADO打开数据连接操作记录集对ADO进行封装北华航天工业学院计算机系制作单击此处编辑母版标题样式9.1VisualC++的数据库接口VisualC++从1.5版本开始具有数据库操作功能,到现在已具有强大的开发数据库程序的集成开发环境,拥有诸如ODBC(OpenDataBaseConnectity)、DAO(DataAccessObject)、ADO(ActiveXDataObject)等多种数据库访问方式,这些接口允许在VisualC++应用程序中灵活地使用数据库。北华航天工业学院计算机系制作单击此处编辑母版标题样式9.1VisualC++的数据库接口1.ODBCAPIODBC,即开放数据库互连,是微软公司提供的进行数据库访问的统一接口,即ODBCAPI,应用程序通过调用API中提供的函数,最终使用SQL语句实现对数据库的操作。只要支持ODBC规范的数据库,应用程序都可以使用ODBCAPI进行访问。目前,所有的关系数据库都提供了ODBC驱动程序,ODBC已经成为一种标准。ODBCAPI的特点是功能强大,能够实现对数据库的底层操作,但编程工作量大,比其他方法复杂。北华航天工业学院计算机系制作单击此处编辑母版标题样式9.1VisualC++的数据库接口2.MFCODBCVisualC++提供的MFCODBC类中封装了ODBCAPI函数操作,提供了数据库类,简化了数据库应用程序的开发,缩短了开发周期。MFCODBC类在实际开发中应用比较广泛。北华航天工业学院计算机系制作单击此处编辑母版标题样式9.1VisualC++的数据库接口3.MFCDAOMFCDAO是微软公司开发的专门用于访问微软Access数据库接口。如果数据库应用程序对Access数据库访问,选择DAO是一个不错的方案。北华航天工业学院计算机系制作单击此处编辑母版标题样式9.1VisualC++的数据库接口4.OLEDBOLEDB是为微软提供的一种新的开发数据库应用程序的数据库接口,它是基于组件对象模型(COM)的开发技术。OLEDB对关系数据库和非关系数据库提供了一致的接口,这种接口增强了程序的可移植性,但有时会使操作复杂化。北华航天工业学院计算机系制作单击此处编辑母版标题样式9.1VisualC++的数据库接口5.ActiveX数据对象(ADO)ADO是面向对象的OLEDB,ADO对OLEDB接口作了封装,定义了ADO对象,使应用程序的开发得到简化。ADO属于数据库技术中的高层接口。北华航天工业学院计算机系制作单击此处编辑母版标题样式9.2ADO技术ADO是Microsoft公司新的数据访问技术,由于它是基于OLEDB接口上实现的COM对象,其性能和易用性都达到了极佳水平。ADO并不与数据库直接打交道,而是要通过ODBC驱动程序或OLEDB连接字符串来操作数据库。利用ADO对象并通过ODBC或OLEDB,可以实现对任意数据库的存取和访问。北华航天工业学院计算机系制作单击此处编辑母版标题样式9.2ADO技术ADO模型包括7个对象,ADO的对象模型,包括以下七个对象:Connection、Command、Parameter、Recordset、Field、Property、Error。此外,还包括其他4个集合对象:Fields、Errors、Parameters和Properties。一个典型的ADO应用程序使用Connection对象建立与数据源的连接,然后用一个Command对象给出对数据库操作的命令,如插入数据或者查询数据等,而Recordset用于对结果集进行维护或者浏览等操作。其中Command命令所使用的语言与低层所对应的OLEDB数据源有关,不同的数据源可以使用不同的命令语言,对于关系数据库,通常使用SQL作为命令语言。北华航天工业学院计算机系制作单击此处编辑母版标题样式9.2ADO技术9.2.1ADO对象1.Connection对象(连接对象)Connection对象用于创建一个到数据源的开放连接。通过此连接,可实现对一个数据库访问和操作。如果需要多次访问某个数据库,应使用Connection对象来建立一个连接。也可以经由一个Command或Recordset对象传递一个连接字符串来创建某个连接。不过,此类连接仅仅适合一次具体的简单的查询。北华航天工业学院计算机系制作单击此处编辑母版标题样式9.2ADO技术9.2.1ADO对象2.Command对象(命令对象)Command对象的作用是:对一个数据库执行简单的查询语句。通过使用查询语句,可以创建、获取、删除或者更新记录信息。如果使用查询语句获取数据,那个该数据将以记录对象RecordSet对象的形式返回。这意味着所有获取的数据可以是记录的属性、集合、方法以及事件所对应的操作对象。ADO指令对象最主要的特点就是通过参数来使用已存在的查询语句和程序。北华航天工业学院计算机系制作单击此处编辑母版标题样式9.2ADO技术9.2.1ADO对象3.Recordset对象(记录集对象)Recordset对象用于数据记录的集合。一个Recordset对象是有记录(行)和字段(列)组成的。在ADO中,Recordset对象是最重要的,通常使用它对数据库中的数据进行操作。当第一次打开一个记录集时,当前的记录指针将指向第一条记录,此时,BOF和EOF属性值都为False;如果不存在记录,那么BOF和EOF属性值都为True。北华航天工业学院计算机系制作单击此处编辑母版标题样式9.2ADO技术9.2.1ADO对象Recordset记录集对象支持两种类型的更新:(1)立即更新:一旦请求Update方法时,所有的改变都将被立即写入数据库中。(2)批量更新:由提供者先对所有的改变进行缓存,然后再通过UpdateBatch方法将它们集体发送到数据库完成更新。Recordset对象使用游标来表示当前指向哪个记录,在ADO中,定义了4种不同类型的游标:北华航天工业学院计算机系制作单击此处编辑母版标题样式9.2ADO技术9.2.1ADO对象(1)动态游标:允许查看添加及变更信息,同时允许其他用户删除信息。(2)键集游标:该游标其行为与动态游标类似,唯一的不同是,不能查看其他用户添加的信息,并且,不允许访问已被其他用户删除的信息。其他用户改变后的信息仍然是可见的。(3)静态游标:它提供了一个记录集的静态副本,通过它可以查找数据或生成报告。其他用户对信息的添加、更改和删除都是不可见的。该类型的游标只允许打开客户端记录集对象(4)仅向前游标:仅允许向前翻滚查询信息,其行为类似静态游标。其他用户对信息的添加、更改和删除都是不可见的。游标类型可以通过Open方法中的CursorType属性或CursorType参数进行设置。北华航天工业学院计算机系制作单击此处编辑母版标题样式9.2ADO技术9.2.1ADO对象4.Parameter对象(参数对象)Parameter对象是为存储过程或查询语句提供一个单独的参数信息。当Parameter参数对象被建立时,它会被添加进参数集合中。参数集合是与一个指定的Command命令对象一起使用的,该命令对象使用集合将参数传递到现有的程序和查询语句中。参数可以被用来创建参数化的命令。这些命令(在它们被定义或保存之后)通过使用参数将一些未执行的指令进行更改。举例来说,SQLSELECT语句可以使用一个参数来定义一个WHERE条款规则。Parameter有四种类型的参数:input参数、output参数、input/output参数以及return参数。北华航天工业学院计算机系制作单击此处编辑母版标题样式9.2ADO技术9.2.1ADO对象5.Field对象(字段对象)Field对象用于表示Recordset对象中的列信息。一个Recordset对象包含由Field对象组成的Fields集合。每个Field对象对应于Recordset中的一列。即,每个记录集行包含一个或多个字段。北华航天工业学院计算机系制作单击此处编辑母版标题样式9.2ADO技术9.2.1ADO对象6.Property对象(属性对象)属性对象代表了通过提供者定义的ADO对象的一个动态属性。每一个ADO对象都有一组唯一的属性来描述或控制对象的行为。北华航天工业学院计算机系制作单击此处编辑母版标题样式9.2ADO技术9.2.1ADO对象ADO对象的属性有两种类型:内置属性和动态属性。内置属性是在ADO中实现并立即可用于任何新对象的属性,它们不会作为Property对象出现在Properties集合中。可以修改它们的属性值,但无法修改属性。动态属性由提供者定义,出现在Properties集合中。每个提供者都有不同的方法来与ADO进行交互,因此,ADO需要存放一些有关这些提供者的信息。具体方法就是提供者将具体的信息(动态属性)发给ADO,ADO在属性对象(被指派的属性对象保存在属性集合中)中保存每个提供者的属性特征。上述的属性集合将被指派到一个命令对象、连接对象、字段对象或是一个记录集对象中。北华航天工业学院计算机系制作单击此处编辑母版标题样式9.2ADO技术9.2.1ADO对象7.Error对象(错误对象)Error对象包含了错误数据的详细资料,该错误数据由执行单个操作的程序所产生。ADO将为每个错误产生出一个Error对象,每个Error对象包含了具体的错误信息,并且这些错误信息被存储在Errors对象集合中。北华航天工业学院计算机系制作单击此处编辑母版标题样式9.2ADO技术9.2.1ADO对象8.集合对象ADO集合对象提供一种包含其它类型对象的对象类型。ADO提供了4种不同类型的集合对象:(1)Parameters对象:包括与Command对象所关联的所有Parameter对象的集合。(2)Fields对象:包括与Recordset对象所关联的所有Field对象的集合。(3)Properties:包括与Connection、Command、Recordset和Field对象所关联的所有Property对象的集合。(4)Errors对象:为响应单个连接错误而创建的所有Error对象。北华航天工业学院计算机系制作单击此处编辑母版标题样式9.2ADO技术9.2.2使用ADO对象使用ADO对象的步骤:1.引入ADO动态链接库,初始化COM环境在使用VisualC++的MFC编程时,MFC并没有提供对ADO的封装类,能够支持ADO编程的是ADO的COM动态链接库文件msado*.dll,“*”位置的数字代表ADO库的版本。引入该文件的方法是在stdafx.h头文件中,添加如下代码:北华航天工业学院计算机系制作单击此处编辑母版标题样式9.2ADO技术9.2.2使用ADO对象#importc:\programfiles\commonfiles\system\ado\msado15.dllno_namespacerename(EOF,adoEOF)其中,no_namespace声明在工程中使用ADO,但不使用ADO的名字空间,并为了避免冲突,将EOF改名为adoEOF。msado15.dll的路径取决于当前及其中它所在的目录。ADO是基于COM技术的,所以,在应用程序调用ADO前,必须初始化COM库环境。ADO使用结束后需要关闭库,释放初始化加载的动态链接库。::CoInitialize(NULL);//初始化COM库::CoUninitialize();//清除COM库如果在程序前没有初始化代码,将会产生COM错误。北华航天工业学院计算机系制作单击此处编辑母版标题样式9.2ADO技术9.2.2使用ADO对象2.创建ADO与数据库的连接使用Connection对象打开连