《数据库访问-VC++软件开发课件.ppt》由会员分享,可在线阅读,更多相关《数据库访问-VC++软件开发课件.ppt(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院数据库访问数据库访问VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院一、一、MFCMFC提供的数据库访问类提供的数据库访问类 Visual C+的的MFC类库中集成了许多类库中集成了许多ODBC类。当使用类。当使用AppWizard创建一个数创建一个数据库应用程序时,在该程序中就已经加入了许据库应用程序时,在该程序中就已经加入了许多不同的多不同的ODBC类,例如类,例如CDatabase、CRecordset、CRecordView、CDBException和和CFieldExchange,其,其中最重要的是中最重要的
2、是CDatabase、CRecordset、CRecordView这三个类。这三个类。VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院1.1 CDatabase类类 MFC CDatabase类类封封装装了了应应用用程程序序与与需需要要访访问问的的数数据据库库之之间间的的连连接接,控控制制事事务务的的提提交交和和执执行行SQL语语句句的的方方法法。主主要要用用来与一个数据源相连。来与一个数据源相连。VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院1.1.1 OpenEx()函数函数 为了创建一个新的为了创建一个新的CDatabase,并,并与一个数据库连接,可以建立
3、一个新的与一个数据库连接,可以建立一个新的CDatabase对象,且调用它的对象,且调用它的OpenEx成员:成员:virtual BOOL OpenEx(LPCTSTR lpszConnectString,DWORD dwOptions=0)VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院1.1.3 Close函数函数 Close函数用来关闭数据源的连接。不函数用来关闭数据源的连接。不管是用管是用OpenEx函数,还是用函数,还是用Open函数函数打开了数据库,结束时都应该调用打开了数据库,结束时都应该调用CData
4、base:Close(),关闭对数据源的连接。,关闭对数据源的连接。VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院1.1.4 用用CDatabase执行执行SQL语语句句通过调用通过调用CDatabase:ExecuteSQL()函函数,可以执行数,可以执行SQL语句,函数的调用格式如语句,函数的调用格式如下:下:void ExecuteSQL(LPCSTR lpszSQL)函数只带有一个参数,就是传给函数只带有一个参数,就是传给lpszSQL的的SQL字符串,并对数据源执行该函数。这字符串,并对数据源执行该函数。这里要注意的是里要注意的是ExecuteSQL()函数没有返函数
5、没有返回值。如果回值。如果SQL语句失败,就会出现语句失败,就会出现CDBException类型的异常。类型的异常。VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院1.1.5 用用CDatabase进行事务处进行事务处理理 CDatabase类可以处理数据库连接类可以处理数据库连接中的事务。事务允许用户把一些中的事务。事务允许用户把一些SQL语句作语句作为一个单独操作执行,如果在事务中一个语为一个单独操作执行,如果在事务中一个语句出错,那么其他语句也会停止执行。句出错,那么其他语句也会停止执行。调用调用CDatabase:BeginTrans函数函数可以开始使用一个可以开始使用一
6、个MFC ODBC类的事务。类的事务。然后就可以调用然后就可以调用CDatabase:ExecuteSQL函数来执行函数来执行组成这个事务的操作,或者使用从这个组成这个事务的操作,或者使用从这个CDatabase中派生出的中派生出的CRecordset对象对象执行这些操作。执行这些操作。VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院1.2 CRecordset类(续)类(续)CRecordsetCRecordset类封装了大部分操纵数据库的方法,类封装了大部分操纵数据库的方法,类封装了大部分操纵数据库的方法,类封装了
7、大部分操纵数据库的方法,包括浏览、修改记录,控制游标移动,排序等操包括浏览、修改记录,控制游标移动,排序等操包括浏览、修改记录,控制游标移动,排序等操包括浏览、修改记录,控制游标移动,排序等操作。作。作。作。在开始处理一个记录集之前,需要构建一个新在开始处理一个记录集之前,需要构建一个新在开始处理一个记录集之前,需要构建一个新在开始处理一个记录集之前,需要构建一个新的的的的CRecordsetCRecordset对象,然后调用该对象的对象,然后调用该对象的对象,然后调用该对象的对象,然后调用该对象的OpenOpen成员方法以打开记录集。调用的格式如下:成员方法以打开记录集。调用的格式如下:成员
8、方法以打开记录集。调用的格式如下:成员方法以打开记录集。调用的格式如下:virtual BOOL Open(virtual BOOL Open(UNIT UNIT nOpenType=AFX_DB_USE_DEFAULT_nOpenType=AFX_DB_USE_DEFAULT_TYPETYPE,LPCTSTR lpszSQL=NULLLPCTSTR lpszSQL=NULL,DWORD dwOptions=none)DWORD dwOptions=none);VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院1.2.1 记录集类型记录集类型CRecordset类对象提供了从数据源
9、中类对象提供了从数据源中提取出的记录集。提取出的记录集。CRecordset对象通常对象通常用于两种形式:用于两种形式:动态行集动态行集(dynasets)和)和快照集快照集(snapshots)。动态行集能保持与)。动态行集能保持与其他用户所做的其他用户所做的更改保持同步更改保持同步,快照集则,快照集则是数据的是数据的一个静态视图一个静态视图。每一种形式在记。每一种形式在记录集被打开时都提供一组记录,所不同的录集被打开时都提供一组记录,所不同的是,当在一个动态行集里滚动到一条记录是,当在一个动态行集里滚动到一条记录时,由其他用户或是应用程序中的其他记时,由其他用户或是应用程序中的其他记录集对
10、该记录所做的更改会相应地显示出录集对该记录所做的更改会相应地显示出来。来。VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院1.2.3 记录集选项记录集选项 最后一个最后一个CRecordset:Open()()的参数允许用户指定几个不同的记录集选的参数允许用户指定几个不同的记录集选项。项。dwOption是一个可能包含许多不同是一个可能包含许多不同常量联合的位图。常量联合的位图。VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院1.3 CReco
11、rdView类类 CRecordView类提供了与类提供了与recordset对象相连接的视图,可以建立对象相连接的视图,可以建立视图中的控件与数据库数据的对应,同时视图中的控件与数据库数据的对应,同时支持移动游标,修改记录等操作。支持移动游标,修改记录等操作。正如其他对话类型一样,正如其他对话类型一样,CRecordView类使用一个对话模板以定类使用一个对话模板以定义视窗的布局。在实际操作中,可以自己义视窗的布局。在实际操作中,可以自己从从CRecordView类派生出一个新的类。类派生出一个新的类。VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院1.4 CDBExcepti
12、on类类CDBException类提供了对数据库操类提供了对数据库操作的异常处理,可以获得操作异常的相关作的异常处理,可以获得操作异常的相关返回代码。返回代码。VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院1.6 建立、连接数据源建立、连接数据源 数据源是应用程序与数据库系统连接数据源是应用程序与数据库系统连接的桥梁的桥梁,它为,它为ODBC应用程序制定运行数应用程序制定运行数据库系统的服务器名称,以及用户的缺省据库系统的服务器名称,以及用户的缺省连接参数等,所以在开发连接参数等,所以在开发ODBC应用程序应用程序时
13、应首先建立数据源。时应首先建立数据源。ODBC驱动程序可驱动程序可以建立、配置或删除数据源,并查看系统以建立、配置或删除数据源,并查看系统当前所安装的数据驱动程序。当前所安装的数据驱动程序。VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院二、二、ADO技术技术 ADO是一种基于是一种基于OLE DB API基础之上的一基础之上的一种面向对象、与语言无关的接口,即种面向对象、与语言无关的接口,即ActiveX数数据对象据对象(ADO:ActiveX Data Objects)技术。)技术。ADO是是Microsoft为最新和最强大的数据访为最新和最强大的数据访问范例问范例OLE D
14、B而设计的,是一个便于使用的而设计的,是一个便于使用的应应用程序层接口用程序层接口。ADO使用户能够编写应用程序以使用户能够编写应用程序以通过通过OLE DB提供者访问和操作数据库服务器中提供者访问和操作数据库服务器中的数据。的数据。ADO最主要的优点是最主要的优点是易于使用、速度快、易于使用、速度快、内存支出少和磁盘遗迹小内存支出少和磁盘遗迹小。ADO在关键的应用方在关键的应用方案中使用最少的网络流量,并且在前端和数据源案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口。量、高性能的接口。VC+软件开
15、发软件开发广州大学华软软件学院广州大学华软软件学院2.1 ADO编程模型编程模型 ADO是用来访问是用来访问OLE DB的数据库技术,的数据库技术,是一种基于对象的模型是一种基于对象的模型。ADO编程模型包编程模型包括括连接对象、命令对象、记录对象、记录集连接对象、命令对象、记录对象、记录集对象、字段对象、参数对象和错误对象以及对象、字段对象、参数对象和错误对象以及对象集合和属性对象集合和属性。连接(连接(Connection):):通过连接可从应通过连接可从应用程序访问数据源,连接是交换数据所必需用程序访问数据源,连接是交换数据所必需的环境。的环境。命令(命令(Command):):通过已建
16、立的连接发通过已建立的连接发出的命令以某种方式来操作数据源。一般情出的命令以某种方式来操作数据源。一般情况下,命令可以在数据源中添加、删除或更况下,命令可以在数据源中添加、删除或更新数据,或者在表中以行的格式检索数据。新数据,或者在表中以行的格式检索数据。VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院 参数(参数(Parameter):通常,命令需要的变量部):通常,命令需要的变量部分,即参数可以在命令发出之前进行更改。例如,分,即参数可以在命令发出之前进行更改。例如,可重复发出相同的数据检索命令,但每次均可更改可重复发出相同的数据检索命令,但每次均可更改指定的检索信息。记录集
17、(指定的检索信息。记录集(Recordset):如果命):如果命令是在表中按信息行返回数据的查询(行返回查询)令是在表中按信息行返回数据的查询(行返回查询),则这些行将会存储在本地。,则这些行将会存储在本地。字段(字段(Field):一个记录集行包含一个或多个):一个记录集行包含一个或多个字段。如果将记录集看做二维网格,字段将排列构字段。如果将记录集看做二维网格,字段将排列构成列。每一字段(列)都分别包含有名称、数据类成列。每一字段(列)都分别包含有名称、数据类型和值的属性,正是在该值中包含了来自数据源的型和值的属性,正是在该值中包含了来自数据源的真实数据。真实数据。错误(错误(Error):
18、错误随时可在应用程序中发生,):错误随时可在应用程序中发生,通常是由于无法建立连接、执行命令或对某些状态通常是由于无法建立连接、执行命令或对某些状态(例如,试图使用没有初始化的记录集)的对象进(例如,试图使用没有初始化的记录集)的对象进行操作引起的。行操作引起的。VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院2.2 ADO接口简介接口简介 ADO库包含库包含3个基本接口:个基本接口:u_ConnectionPtr接口接口u_CommandPtr接口接口u_RecordsetPtr接口接口VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院VC+软件开发软件开发广州大学
19、华软软件学院广州大学华软软件学院2.2.2 _CommandPtr接口接口 _CommandPtr接口接口返回一个记录集返回一个记录集。它提供了。它提供了一种简单的方法来执行返回记录集的存储过程一种简单的方法来执行返回记录集的存储过程和和SQL语句。在使用语句。在使用_CommandPtr接口时,可接口时,可以利用全局以利用全局_ConnectionPtr接口,也可以在接口,也可以在_CommandPtr接口里直接使用连接字符串。如接口里直接使用连接字符串。如果只执行一次或几次数据访问操作,后者是比果只执行一次或几次数据访问操作,后者是比较好的选择。但如果要频繁访问数据库,并要较好的选择。但如
20、果要频繁访问数据库,并要返回很多记录集,那么,应该使用全局返回很多记录集,那么,应该使用全局_ConnectionPtr接口创建一个数据连接,然后接口创建一个数据连接,然后使用使用_CommandPtr接口执行存储过程和接口执行存储过程和SQL语语句。句。VC+软件开发软件开发广州大学华软软件学院广州大学华软软件学院2.2.3 _RecordsetPtr _RecordsetPtr是一个是一个记录集对象记录集对象。同以。同以上两种对象相比,它对记录集提供了更多的控上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定、游标控制等。同制功能,如记录锁定、游标控制等。同_CommandPtr接
21、口一样,它不一定要使用一个接口一样,它不一定要使用一个已经创建的数据连接,而已经创建的数据连接,而可以用一个连接字符可以用一个连接字符串代替连接指针赋给串代替连接指针赋给_RecordsetPtr的的connection成员变量成员变量,让它自己创建数据,让它自己创建数据连接。如果要使用多个记录集,最好的方法是连接。如果要使用多个记录集,最好的方法是同同Command对象一样使用已经创建了数据对象一样使用已经创建了数据连接的全局连接的全局_ConnectionPtr接口,然后使用接口,然后使用_RecordsetPtr执行存储过程和执行存储过程和SQL语句。语句。VC+软件开发软件开发广州大学
22、华软软件学院广州大学华软软件学院2.3 ADO库库ADOADO库是一组库是一组库是一组库是一组COMCOM动态库,库文件为动态库,库文件为动态库,库文件为动态库,库文件为msado15.dllmsado15.dll,可以在,可以在,可以在,可以在x:program x:program filescommon filessystemadofilescommon filessystemado中找到这个中找到这个中找到这个中找到这个文件文件文件文件(其中其中其中其中x x表示表示表示表示WindowsWindows系统所在分区的盘符系统所在分区的盘符系统所在分区的盘符系统所在分区的盘符)。要使用要使
23、用要使用要使用ADOADO,就要引入,就要引入,就要引入,就要引入ADOADO库文件。方法:在工程库文件。方法:在工程库文件。方法:在工程库文件。方法:在工程的的的的stdafx.hstdafx.h文件里用直接引入符号文件里用直接引入符号文件里用直接引入符号文件里用直接引入符号#import#import引入引入引入引入ADOADO库文件,库文件,库文件,库文件,#import x:program filescommon#import x:program filescommon filessystemadomsado15.dllfilessystemadomsado15.dllno_namespace rename(EOF,no_namespace rename(EOF,adoEOF)adoEOF)因为因为因为因为ADOADO是基于是基于是基于是基于COMCOM技术的,在使用技术的,在使用技术的,在使用技术的,在使用ADOADO之前要先之前要先之前要先之前要先初始化初始化初始化初始化COMCOM库环境,即在应用程序类的库环境,即在应用程序类的库环境,即在应用程序类的库环境,即在应用程序类的InitInstanceInitInstance函数中,调用函数中,调用函数中,调用函数中,调用AfxOleInit()AfxOleInit()函数。函数。函数。函数。