欢迎来到天天文库
浏览记录
ID:14819716
大小:350.50 KB
页数:82页
时间:2018-07-30
《第6章 mfc odbc编程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第6章MFCODBC编程为了简化开发人员编写数据库应用程序,VC++的在其基础类库(MFC)里对ODBCAPI进行了封装,实现了一个面向对象的数据库编程接口,使VC++的数据库变得更加容易。本章首先对MFCODBC的概貌进行简要介绍,然后讲述利用MFCODBC进行数据库开发的技巧,最后将通过具体数据库开发实例,详细讲述通过MFCODBC开发数据库应用程序的方法和过程。6.1了解MFCODBCMFC是MicrosoftFoundationClass(微软基础类库)的缩写,它的设计目标是简化开发人员的工作。MFC使开发人员
2、创建基于Windows的应用程序,而不必掌握下层的Windows体系结构。由于数据库应用程序是管理数据的重要方面,Microsoft开发了ODBCAPI的封装程序,为ODBC编程提供了一个面向对象的方法。MFC对ODBC的封装主要是开发了CDatabase类和CRecordSet类。6.1.1CDatabase类CDatabase类用于应用程序建立同数据源的连接。CDatabase类包含一个m_hdbc变量,它代表了数据源的连接句柄。如果要建立CDatabase类的实例,应先调用该类的构造函数,再调用Open函数,通过
3、调用,初始化环境变量,并执行与数据源的连接。关闭数据源连接的函数是Close。CDatabase类提供了对数据库进行操作的函数,为了执行事务操作,CDatabase类提供了BeginTrans函数,当全部数据都处理完成后,可以通过调用CommitTrans函数提交事务,或者在特殊情况下通过调用Rollback函数将处理回退。CDatabase类提供的函数可以用于返回数据源的特定信息,例如通过GetConnect函数返回在使用函数Open连接数据源时的连接字符串,通过调用IsOpen函数返回当前的CDatabase实例是
4、否已经连接到数据源上,通过调用CanUpdate函数返回当前的CDatabase实例是否是可更新的,通过调用CanTransact函数返回当前的CDatabase实例是否支持事务操作,等等。总之,CDatabase类为C++数据库开发人员提供了ODBC的面向对象的编程接口。6.1.2CRecordSet类要实现对结果集的数据操作,就要用到CRecordSet类。CRecordSet类定义了从数据库接收或者发送数据到数据库的成员变量,CRecordSet类定义的记录集可以是表的所有列,也可以是其中的一列,这是由SQL语句
5、决定的。CRecordSet类的成员变量m_hstmt代表了定义该记录集的SQL语句句柄,m_nFields成员变量保存了记录集中字段的个数,m_nParams成员变量保存了记录集所使用的参数个数。CRecordSet的记录集通过CDatabase实例的指针实现同数据源的连接,即CRecordSet的成员变量m_pDatabase。如果记录集使用了WHERE子句,m_strFilter成员变量将保存记录集的WHERE子句的内容,如果记录集使用了ORDERBY子句,m_strSort成员变量将保存记录集的ORDERBY子
6、句的内容。由多种方法可以打开记录集,最常用的方法是使用Open函数执行一个SQLSELECT语句。有如下四种类型的记录集:·CRecordset::dynaset:动态记录集,支持双向游标,并保持同所连接的数据源同步,对数据的更新操作可以通过一个fetch操作获取。·CRecordset::snapshot:静态快照,一旦形成记录集,此后数据源的所有改变都不能体现在记录集里,应用程序必须重新进行查询,才能获取对数据的更新。该类型记录集也支持双向游标。·CRecordset::dynamic:同CRecordset::d
7、ynaset记录集相比,CRecordset::dynamic记录还能在fetch操作里同步其它用户对数据的重新排序。·CRecordset::forwardOnly:除了不支持逆向游标外,其它特征同CRecordset::snapshot相同。6.2MFCODBC数据库访问技术6.2.1记录查询使用CRecordSet的Open()和Requery()成员函数可以实现记录查询。需要注意的是,在使用CRecordSet的类对象之前,必须使用CRecordSet的成员函数Open()来获得有效的记录集。一旦使用过Open
8、()函数,再次查询时使用Requery()函数就可以了。在调用Open()函数时,如果已经将一个打开的CDatabase对象指针传递给CRecordSet类对象的m_pDatabase成员变量,那么,CRecordSet类对象将使用该数据库对象建立ODBC连接;否则,如果m_pDatabase为空指针,对象就需要就新建一个CDat
此文档下载收益归作者所有