转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
简析Visual C++中的活动数据对象(ado)         ★★★★

简析Visual C++中的活动数据对象(ado)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:967 更新时间:2009/4/23 10:43:07
程序运行效果截图:


摘 要: 本文简要介绍了微软的活动数据对象(ADO)模型,结合实例阐述了在Visual C++环境下使用ADO操纵数据库的基本步骤,分析ADO的特点及与开放式数据库连接(ODBC)的差异与应用前景。

左图:ADO对象模型

  关键词: 活动数据对象 数据库 Visual C++

  1 ADO是微软整个COM战略体系中的一个组成部分

  活动数据对象(ADO)是一组由微软提供的COM组件。 ADO建立在微软所提倡的COM体系结构之上,它的所有接口都是自动化接口,因此在C++、VisualBasic、Delphi等支持COM的开发语言中通过接口都可以访问到ADO。ADO通过使用OLE DB这一新技术实现了以相同方式可以访问关系数据库、文本文件、非关系数据库、索引服务器和活跃目录服务等的数据,扩大了应用程序中可使用的数据源范围,从而成为微软整个COM战略体系中访问数据源组件的首选,是ODBC的替代产品。



  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:ADOmsado15.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对象上的所有更新一次送入数据库

  (10) 关闭Record set对象并释放Bind接口。

  例:

RstADO1->Close();
RstADOBind2->Release();

  (11) 关闭连接 pConnection1->Close();

  (12) 调用CoUnitialize释放COM资源 ::CoUninitialize();

  5 结论

  作为ODBC的替代产品,ADO确实有其过人之处。由于ADO数据源几乎覆盖了目前常见的数据源类型,对于ODBC所不支持的数据源,ADO无疑是唯一的选择。而ADO的批更新功能,更是网络环境下大数据量更新应用的重要因素。由于ADO缺乏大量的第三方厂商的支持,使得ADO目前远不如ODBC普及,但其面向对象的特性将使ADO具有比较广阔的发展前景。


[VB.NET程序]ADO 在informix的 Addnew  [VB.NET程序]ADO 的测试
[VB.NET程序]ADO 揭密 1  [Web开发][ADO]如何修改ADO的线程模型
[Web开发]Delphi7下仿Ado.Net类的实现  [Web开发]通过COM使用ADO
[Web开发]ADO & ADO.NET中使用存储过程的两个共用的函数  [Web开发]Binding a DataGrid to an ADO Recordset
[Web开发]ADOCE for ADO Programmers  [Web开发]Delphi多线程下的ADO编程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台