主要内容:
MFC ODBC将ODBC API封装在类CDatabase、CRecordSet、CFieldExchange、CRecordView和CDBException中
使用MFC ODBC开发数据库应用程序的一般步骤
使用AppWizard访问数据库
使用类CDatabase连接数据库
使用类CRecordSet打开记录集、获取数据
使用类CRecordSet的函数MoveFirst()、MoveLast()、MoveNext()、MovePrev()、IsBOF()和IsEOF()进行记录集的遍历
使用类CRecordSet的函数AddNew和Update增加记录
使用类CRecordSet的函数Edit和Update修改记录
使用类CRecordSet的函数Delete删除记录
使用类CDatabase的函数ExecuteSQL直接执行SQL命令
使用类CDatabase的函数BeginTrans、CommitTrans和Rollback处理事务
MFC OBDC技术
概述
MFC的ODBC类对较复杂的ODBC API进行了封装,提供了简化的调用接口。MFC的ODBC类主要包括以下5个类:
CDatabase类:主要功能是建立与数据源的连接
CRecordset类:代表从数据源选择的一组记录(记录集)
CRecordView类:提供了一个表单视图与某个记录集直接相连,利用对话框数据交替机制(DDX)在记录集与表单视图的控件之间传输数据
CFieldExchange类:支持记录字段数据交换(RFX),即记录集字段数据成员与相应的数据库的表的字段之间的数据交换。
CDBException类:代表ODBC类产生的异常。
CDatabase类操作数据源
CDatabase类型的对象表示一个到数据源的连接,通过它可以操作数据源。
该类的成员函数如下表:
函数
说明
CDatabase
构造一个对象
Close
关闭数据源连接
Open
通过一个ODBC驱动程序创建到数据源的连接
OpenEx
通过一个ODBC驱动程序创建到数据源的连接
BeginTrans
开始事务
BindParameters
允许在调用CDatabase::ExecuteSQL前绑定参数
Cancel
取消异步操作或第二条线程中的过程
CommitTrans
执行事务
ExecuteSQL
执行SQL语句,不返回记录
Rollback
回滚事务,数据源返回先前的状态
该类的属性属性如下表:
属性
说明
CanTransact
如果数据源支持事务,返回非零
CanUpdate
如果CDatabase可以更新,返回非零
GetBookmarkPersistence
获得书签对记录集对象的持久性
GetConnect
返回ODBC连接串
GetCursorCommitBehavior
获得提交事务对记录集对象的影响
GetCursorRollbackBehavior
获得回滚事务对记录集对象的影响
GetDatabaseName
返回当前使用的数据库名
IsOpen
如果当前CDatabase对象连接到数据源,返回非零
SetLoginTimeout
设置数据源连接的超时数(秒为单位)
SetQueryTimeout
设置查询操作的超时数(秒为单位)
应用程序可使用多个CDatabase类型的对象。构造一个对象并调用Open()成员函数打开一个连接。接着构造CRecordset类型的对象以操作连接的数据源,构造时向记录集对象传递CDatabase类型的指针。完成使用后,用Close()成员函数销毁CDatabase类型的对象。
一般情况下并不需要直接使用CDatabase类型的对象,因为CRecordset类型的对象可以实现大多数的功能、但是在进行事务处理时,CDatabase就起到关键作用。事务(Transaction)指的是将一系列对数据源的更新放在一起,同时提交或一个都不提交,为的是确保多用户对数据源同时操作时的数据正确性。
CRecordset类操作记录集
一个CRecordset类型的对象代表从数据源选择的一组记录的集合——记录集,通过该类的方法实现对数据库中记录的各种操作。
该类常用的数据成员如下表:
成员
说明
m_hstmt
包含记录集的ODBC陈述句柄,类型为HSTMT
m_nFields
包含记录集中字段数据成员的数量,类型为UNIT
m_nParams
包含记录集中参数数据成员的数量,类型为UNIT
m_pDatabase
包含一个CDatabase对象指针,通过它访问数据源
m_strFilter
包含CString对象,定义SQL中WHERE子句
m_strSort
包含CString对象,定义SQL中ORDER BY子句
该类的构造方法如下表:
构造方法
说明
Close
关闭记录集和与之相关的HSTMT
CRecordset
构造一个CRecordset对象
Open
通过获得表或执行记录集所代表的查询来打开记录集
CRecordset类记录集属性如下表:
属性
说明
CanAppend
如果新记录可以通过Addnew添加到记录集,返回非零
CanBookmark
如果记录集支持书签,返回非零
CanRestart
如果Requery可以被调用来再次运行记录集查询,返回非零
CanScroll
如果可以在记录中回滚,返回非零
CanTransact
如果数据源支持事务,返回非零
CanUpdate
如果记录集可以被更新,返回非零
GetODBCFieldCount
返回记录集中字段的数量
GetRecordCount
返回记录集中记录的数量
GetSQL
获得SQL字符串
GetStatus
获得记录集的状态
GetTableName
获得记录集所属的表名
IsBOF
如果记录集定位在第一条记录之前,返回非零
IsDeleted
如果记录集定位在一条删除的记录,返回非零
IsEOF
如果记录集定位在最后一条记录之后,返回非零
IsOpen
如果调用过Open函数,返回非零
CRecordset类更行操作如下表:
更新操作
说明
AddNew
准备增加一条新纪录,调用Update之后完成添加
CancelUpdate
取消任何未完成的更新
Delete
从记录集中删除当前记录
Edit
准备对当前记录进行修改,调用Update后完成修改
Update
通过将新记录或编辑的数据存入数据源来完成AddNew或Edit操作
记录集有两种形式:snapshot(表示数据的静态视图)和dynaset(表示记录集与其他用户对数据库的更新保持同步)。
CFieldExchange类处理数据交换
CFieldExchange类支持数据库类所使用的记录集字段交换(RFX)程式。如果使用自定义的数据类型写数据交换程式,会使用这个类。否则不会直接使用此类。RFX在记录集对象的字段数据成员与数据源中当前记录的相应字段之间交换数据。
CRecordView类显示记录
CRecordView对象用于在控件中显示数据库记录的视图。这种视图是一种直接连到一个CRecordView对象的格式视图,它从一个对话框模板创建资源,并将CRecordView对象的字段显示在对话框模版的控件里。对象利用DDX和RFX机制,使窗体上的空间和记录集的字段值之间数据移动自动化,也就是说,用户不需要编写一行代码就可以完成简单的数据库记录查看程序。
CDBException类处理异常
由CException类派生,以3个继承的成员变量反映对数据库操作时的异常:
m_nRetCode:以