CDatabase
CObject
└CDatabase
CDatabase是MFC中的类。CDatabase对象表示到数据源的连接,通过它可以操作数据源。数据源是位于一些数据库管理系统(DBMS)的数据的指定实例,包括MicrosoftSQL Server,Microsoft Access,Borland dBASE和xBASE。在应用中可以同时使一个或多个CDatabase对象活动。
注意:
如果在处理数据访问对象(DAO)类而不是开放数据库连接(ODBC)类,可使用类CDaoDatabase。有关的更多信息,请参阅联机文档“Visual C++程序员指南”中的“数据库主题(通用)”与“DAO和MFC”。
为使用CDatabase,构造一个CDatabase对象并调用它的OpenEx成员函数。这打开了一个连接。在接着构造CRecordset对象以操纵连接的数据源时,向CDatabase对象传递记录集构造程序指针。完成使用连接时调用Close成员函数并销毁CDatabase对象。Close关闭以前没有关闭的任何记录集。
有关CDatabase的更多信息,请参阅联机文档“Visual C++程序员指南”中的“数据源(ODBC)”和“数据库主题(通用)”。
#include <afxdb.h>
CDatabase类成员
数据成员
m_hdbc 对数据源的开放数据库连接(ODBC)连接句柄。类型HDBC
构造函数
CDatabase 构造一个CDatabase对象。必须通过调用OpenEx或Open初始化这个对象
Open 建立到数据源的一个连接(通过ODBC驱动程序)
OpenEx 建立到数据源的一个连接(通过ODBC驱动程序)
Close 关闭数据源连接
数据库属性
GetConnect 返回用于连接CDatabase对象和数据源的ODBC连接字符串
IsOpen 如果CDatabase对象当前与数据源连接,则返回非零
GetDatabaseName 返回当前使用的数据库名字
CanUpdate 如果CDatabase可更新(不是只读的),则返回非零
CanTransact 如果数据源支持事务,则返回非零
SetLoginTimeout 设置数据源连接试图超时的秒数
SetQueryTimeout 设置数据库查询操作超时的秒数。影响以后的所有记录集调用:Open,AddNew,Edit和Delete
GetBookmarkPersistence 标识记录集对象上书签持久化操作
GetCursorCommitBehavior 标识在打开的记录集对象上提交事务的效果
GetCursorRollbackBehavior 标识在打开的记录集对象上回滚事务的效果
数据库操作
BeginTrans 在连接的数据源上开始“事务”──类CRecordset的一系列可回滚的AddNew,Edit,Delete和Update成员函数调用。数据源必须支持事务才能使BeginTrans有效
BindParameters 允许在调用CDatabase::ExecuteSQL前绑定参数
CommitTrans 完成由从BeginTrans开始的事务。执行这个事务中改变数据源的命令
Rollback 回滚当前事务期间所做变化,数据源返回到BeginTrans调用时定义的未改变的以前状况
Cancel 取消第二个线程的异步操作或处理
ExecuteSQL 执行一条SQL语句。不返回数据记录
CDatabase::OpenEx
virtual BOOL OpenEx(LPCTSTR lpszConnectString, DWORD dwOptions = 0);
throw(CDBException,CMemoryException);
返回值:
如果成功形成连接,则返回非零值;否则如果在出现要求更多连接信息的对话框时,用户选择Cancel,则为0。在其它所有情况下框架产生一个异常。
参数:
lpszConnectString 指定一个ODBC连接字符串。这包括数据源名字和用户ID与密码等其它任选信息。例如“DSN = SQLServer_Source; UID = SA; PWD =abc123”是一个可能的连接字符串。注意到如果为lpszConnectString传递NULL,则将出现数据源对话框,提示用户选择一个数据源。
dwOptions 指定下列值一种组合的位屏蔽。缺省值0表示以共享方式打开数据库,带有写访问,不装入ODBC游标库DLL,并且只有在没有足够信息形成连接时显示ODBC连接对话框。
·CDatabase::openExclusive 此类库版本不支持。为共享(非排它)数据源总是打开的。如果选定此选项,断言失败。
· CDatabase::UseCursorLib 装入ODBC游标库DLL。游标掩盖了基础ODBC驱动程序的一些功能,有效地阻止使用动态集(如果驱动程序支持它们)。如果装入游标库,支持的唯一游标是静态快照和只能向前游标。缺省值为TRUE。如果计划从CRecordset直接创建一个记录集对象而不派生,则不应装入游标库。
· CDatabase::noOdbcDialog 不管是否提供了足够的连接信息,不显示ODBC连接对话框。
· CDatabase::forceOdbcDialog 总是显示ODBC连接对话框。
说明:
调用这个成员函数,可以初始化一个新构造的CDatabase对象。必须在用来构造记录集对象前初始化数据库对象。
如果OpenEx调用中的lpszConnectString参数不包含形成连接的足够信息,则ODBC驱动程序打开一个对话框,从用户那里得到必要信息。假设你没有在dwOptions选择中设置CDatabase::noOdbcDialog或CDatabase::forceOdbcDialog。调用OpenEx时,连接字符串lpszConnectString自己存放在CDatabase对象中,并且可以通过调用GetConnect成员函数成为有效。
如果需要的话,可以在调用OpenEx之前打开自己的对话框,从用户处获取密码等信息,然后把那些信息加到传递到OpenEx的连接字符串。
或者有可能想保存传递的连接字符串,这样在应用等到下次调用OpenEx时可以在CDatabase对象上重用它。
还可以把连接字符串用于多个登录授权级别(每个用于不同的CDatabase对象),或者传送其它数据源指定信息。有关连接字符串的更多信息,请参阅联机文档“ODBC SDK程序员参考”中的第5章。
连接有可能试图超时,例如DBMS主机无效时。如果连接试图失败,则OpenEx产生CDBException。
示例:
//Embed a CDatabase object
//in your document class
CDatabase m_dbCust( );
//Connect the object to a
//read-only data source where
//the ODBC connection dialog box
//will always remain hidden
m_dbCust.OpenEx( _T("DSN=MYDATASOURCE;UID=JOES"), CDatabase::openReadOnly | CDatabase::noOdbcDialog));