没有合适的资源?快使用搜索试试~ 我知道了~
VC 数据库编程VC 数据库编程.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 18 浏览量
2022-06-12
00:17:44
上传
评论
收藏 565KB DOC 举报
温馨提示
试读
64页
VC 数据库编程VC 数据库编程
资源推荐
资源详情
资源评论
ODBC 基本概念
ODBC(OpenDatabaseConnectivity , 开 放 数 据 库 互 连 ) 是 微 软 公 司 开 放 服 务 结 构
(WOSA,WindowsOpenServicesArchitecture)中有关数据库的一个组成部分,它建立了
一组规范,并提供了一组对数据库访问的标准 API(应用程序编程接口)。这些 API 利用
SQL 来完成其大部分任务。ODBC 本身也提供了对 SQL 语言的支持,用户可以直接将
SQL 语句送给 ODBC。
一个基于 ODBC 的应用程序对数据库的操作不依赖任何 DBMS,不直接与 DBMS 打
交道,所有的数据库操作由对应的 DBMS 的 ODBC 驱动程序完成。也就是说,不论是
FoxPro、Access 还是 Oracle 数据库,均可用 ODBCAPI 进行访问。由此可见,ODBC 的
最大优点是能以统一的方式处理所有的数据库。
一个完整的 ODBC 由下列几个部件组成:
应用程序(Application)。
ODBC 管理器(Administrator)。该程序位于 Windows95 控制面板(ControlPanel)的 32
位 ODBC 内,其主要任务是管理安装的 ODBC 驱动程序和管理数据源。
驱动程序管理器(DriverManager)。驱动程序管理器包含在 ODBC32.DLL 中,对用户
是透明的。其任务是管理 ODBC 驱动程序,是 ODBC 中最重要的部件。
ODBCAPI。
ODBC驱动程序。是一些 DLL,提供了 ODBC 和数据库之间的接口。
数据源。数据源包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽
象。
各部件之间的关系如图下图所示:
应用程序要访问一个数据库,首先必须用 ODBC 管理器注册一个数据源,管理器根据
数据源提供的数据库位置、数据库类型及 ODBC 驱动程序等信息,建立起 ODBC 与具体
数据库的联系。这样,只要应用程序将数据源名提供给 ODBC,ODBC 就能建立起与相应
数据库的连接。
在 ODBC 中,ODBCAPI 不能直接访问数据库,必须通过驱动程序管理器与数据库交
换信息。驱动程序管理器负责将应用程序对 ODBCAPI 的调用传递给正确的驱动程序,而
驱动程序在执行完相应的操作后,将结果通过驱动程序管理器返回给应用程序。
在访问 ODBC 数据源时需要 ODBC 驱动程序的支持。用 VisualC++5.0 安装程序可以
安装 SQLServer、ÁAccess、ÁParadox、ÁdBase、ÁFoxPro、ÁExcel、ÁOracle和 Microsoft
Text 等驱动程序.在缺省情况下,VC5.0 只会安装 SQLServer、ÁAccess、ÁFoxPro 和
dBase 的驱动程序.如果用户需要安装别的驱动程序,则需要重新运行 VC5.0 的安装程序
并选择所需的驱动程序。
简析 Visual C++中的活动数据对象
摘 要:Á本文简要介绍了微软的活动数据对象(ADO)模型,结合实例阐述了在 Visual C+
+环境下使用 ADO 操纵数据库的基本步骤,分析 ADO 的特点及与开放式数据库连接
(ODBC)的差异与应用前景。
关键词:Á活动数据对象 数据库 Visual C++
1 ADO 是微软整个 COM 战略体系中的一个组成部分
活动数据对象(ADO)是一组由微软提供的 COM 组件。 ADO 建立在微软所提倡的
COM 体系结构之上,它的所有接口都是自动化接口,因此在 C++、VisualBasic、Delphi
等支持 COM 的开发语言中通过接口都可以访问到 ADO。ADO 通过使用 OLE DB 这一新技
术实现了以相同方式可以访问关系数据库、文本文件、非关系数据库、索引服务器和活跃
目录服务等的数据,扩大了应用程序中可使用的数据源范围,从而成为微软整个 COM 战
略体系中访问数据源组件的首选,是 ODBC 的替代产品。
图:ADO 对象模型
2 ADO 对象模型组成
与微软的其它数据访问模型 DAO 和 RDO 相比,ADO 对象模型非常精炼,仅由三个
主要对象 Connection、Command、Recordset 和几个辅助对象组成,其相互关系如图所
示。Connection 对象提供 OLE DB 数据源和对话对象之间的关联,它通过用户名称和口令
来处理用户身份的鉴别,并提供事务处理的支持;它还提供执行方法,从而简化数据源的
连接和数据检索的进程。Command 对象封装了数据源可以解释的命令,该命令可以是
SQL 命令、存储过程或底层数据源可以理解的任何内容。Record set 用于表示从数据源中
返回的表格数据,它封装了记录集合的导航、记录更新、记录删除和新记录的添加等方法,
还提供了批量更新记录的能力。其它辅助对象则分别提供封装 ADO 错误、封装命令参数
和封装记录集合的列。Á
3 ADO 的特点分析
(1)由于封装了许多底层工作,使用 ADO 与使用 ODBC 几乎是一样方便。
(2) ADO 不仅具有 ODBC 的主要功能,而且 ADO 适用的数据源的范围要大的多。
(3)在定义 ADO 记录集变量和数据库表字段绑定类时,要求记录集的字段变量、状态
变量与数据库表字段的个数、顺序必须相同。这一点比在 FMC 中使用 ODBC 要复杂一些。
但在数据库字段与 ADO 记录集字段变量绑定的宏中,ADO 提供的数据类型要远多于 FMC
中的 RFX(如日期时间类型,在 ODBC 中只能转换为 Cstring 类型)。
(4)ADO 允许同一 Connection 实例下有多个 Record set 实例。
(5)ADO 允许进行批更新(使用的 Update Batch 方法),这样将大大减轻网络负担,
提高数据库处理效率。
4 ADO 在 Visual C++中的使用
利用微软在 Micrsoft Studio 6 中提供的 ADO2,可以在 Visual C++中使用 ADO 接口操
纵 SQL SERVER 数据库。在编译型高级语言中使用 ADO,比起在一些脚本语言(如 Visual
Basic Scropt 和 JavaScript)中使用 ADO 要困难一些。
以下给出一个 Visual C++下使用 ADO 的 Connection 对象及其 Record set 对象的基本
步骤:
(1) 使用 import 指令引入 ADO2 组件
例:#import "C:\ADO\msado15.dll" no_namespace rename("EOF", "EndOfFile")
(2) 定义 CADORecordBinding 的派生类,用于程序与数据库表字段的交互,该类
的定义可参见 icrsint.h。
例:
class CIntlive : public CADORecordBinding
{
public:
DBTIMESTAMP m_datetime; //定义 ADO 记录集字段变量(与数据库表字段相对应)
long m_key;
long m_value;
long m_quality;
WORD m_stsdatetime; //定义 ADO 记录集状态变量
WORD m_stskey;
WORD m_stsvalue;
WORD m_stsquality;
BEGIN_ADO_BINDING(CIntlive) //将数据库字段与 ADO 记录集字段变量绑定
ADO_VARIABLE_LENGTH_ENTRY2(1,adDBTimeStamp,m_datetime,sizeof(m_datetime
),m_stsdatetime,true)
ADO_NUMERIC_ENTRY(2,adInteger,m_key,10,0,m_stskey,true)
ADO_NUMERIC_ENTRY(3,adInteger,m_value,10,0,m_stsvalue,true)
ADO_NUMERIC_ENTRY(4,adInteger,m_quality,10,0,m_stsquality,true)
END_ADO_BINDING()
};
(3) 调用 CoInitialize 初始化 COM ::CoInitialize(NULL);
(4) 声明 ADO 的 Connection 对象指针和 Recordset 对象指针并初始化。(类型名
在 msado15.dll 中已定义)
例:
_ConnectionPtr pConnection1 = NULL;
_RecordsetPtr rstADO1 = NULL;
(5) 定义 CADORecordBinding 派生类的实例及其 Bind 接口指针。
例:
CIntlive m_intdata;
IADORecordBinding *rstADOBind1 = NULL;
(6) 产生 Connection 对象实例和 Record set 对象实例。
例:
pConnection1.CreateInstance(_uuidof(Connection));
rstADO1.CreateInstance(__uuidof(Recordset)) ;
(7) 连接到数据库并打开 Record set 对象,其中 open 函数的参数的使用方法可参
见微软 MSDN 中 ADO 相应对象参数的 Basic 描述。
例:
PConnection1->Open("driver={SQL
server};server=servera;uid=sa;pwd=;database=pubs","","",NULL);
rstADO1->Open("data", _variant_t((IDispatch *)pConnection1,true),
adOpenKeyset,adLockBatchOptimistic, adCmdTable);
(8) 将 CADORecordBinding 派生类的实例联编到 Record set 对象的 Bind 接口。
例:
RstADOBind1->BindToRecordset(&m_intdata);
(9) 对 Record set 对象实例进行操作。操作方法可参见微软 MSDN 中 ADO Record
set 对象相应方法的 Basic 描述。
例:
rstADO1->Move Next(); //移动游标到下一条记录
rstADO1->Update(_variant_t("quality"),_variant_t("3"))); //修改记录的 quality 字段的值为 3
rstADO1->Update Batch(adAffectAll)); //将在 Record set 对象上的所有更新一次送入数据
库
剩余63页未读,继续阅读
资源评论
oligaga
- 粉丝: 50
- 资源: 2万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功