一、VC访问数据库技术
1. ODBC
Open Database Connectivity,微软开放式数据互联。
使用相同的这组API函数,访问和操作不同类型的数据库。
前提是在访问之前,需要将数据库设置为ODBC数据源。
MFC将这组函数封装,形成了ODBC类。只能访问关系型数据库。
2. DAO
基于ODBC的,目前已淘汰。
3. OLE DB
基于COM组件技术的,提供了一组用于访问和操作数据库的接口。
功能和性能上都有了很大提高,能访问关系型和非关系型数据库。
缺点是学习门槛高,比较复杂抽象。
4. ADO
基于OLE DB的,又做了封装,提供了更加简单的接口,逐渐流行起来,成为最广泛使用的技术之一。
5. ADO.Net
基于.Net平台,VB、VC、C#都可以使用一组访问数据库的类。
二、使用ODBC类访问数据库
1. 相关类
CDataBase类 - 功能是连接和关闭数据库,还提供了执行SQL语句的功能。
CRecordset类 - 功能是操作数据表中的数据。
头文件 #include <afxdb.h>
2. 使用
2.1 设置ODBC数据源
控制面板 --> 管理工具 --> 数据源ODBC
2.2 打开数据源
virtual void CDatabase::Open( LPCTSTR lpszName,
BOOL bExclusive = FALSE,
BOOL bReadOnly = FALSE,
LPCTSTR lpszConnect = _(""));
2.3 执行sql语句
void CDataBase::Execute( LPCTSTR lpszSQL, int nOptions = 0);
2.4 获取字段的数量
short CRecordset::GetODBCFieldCount( short nIndex, CString& strValue );
2.4 获取字段的标题
void CRecordset::GetODBCFieldInfo( short nIndex, CODBCFieldInfo& fieldInfo );
2.6 获取字段的值
CRecordset::GetFieldValue
2.6 记录集的指针操作
BOOL CRecordset::IsEOF( );
void CRecordset::MoveNext( );
2.8 关闭记录集
virtual void CRecordset::Close( );
2.9 关闭数据库
virtual void CDatabase::Close( );
三、使用ADO访问数据库
ADO是独立于MFC之外一个单独的组件。在使用ADO时,需要将ADO组件导入到当前工程。
1. 导入ADO组件 - msado15.dll
#import "组件路径" no_namespace rename("EOF", "ADOEOF")
我电脑上的路径为:C:Program FilesCommon FilesSystemadomsado15.dll
在工程的stdafx.h中添加以上导入语句,编译工程会生成msado15.tlh和msado15.tli两个文件
2. 使用ADO组件前,初始化COM库
CoInitialize(NULL); - 初始化COM库
CoUninitialize(); - 卸载COM库
3. 在MFC中使用ADO组件,需要C++数据类型与COM数据类型频繁转换,使得ADO组件的使用变得非常繁琐
在实际开发中,将ADO组件的每个接口封装成C++的类,接口函数封装成类的成员函数,形成ADO组件的
C++封装类。
4. 接口的介绍
4.1 Connection接口 - 功能与CDatabase类似
使用CAdoDatabase类封装该接口
4.2 Recordset接口 - 功能与CRecordset类似
使用CAdoRecordset类封装该接口
5. Connection接口的使用
5.1 连接数据库
Open( _bstr_t connectionString, //数据库连接字符串
_bstr_t UserID, //数据库登录名称
_bstr_t Password, //数据库登录密码
long option); //数据库连接方式,-1表示不指定连接方式
不同的数据库产品,数据库连接字符串各不相同。
即使相同的数据库产品,由于版本不同,连接字符串也可能不同。
6. Recordset接口的使用
6.1 打开表
Open( );