转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
VC++程序员如何使用ADO         ★★★★

VC++程序员如何使用ADO

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1574 更新时间:2009/4/23 10:48:15
 

VC++程序员如何使用ADO?

作者:bfbd

2002 年 1 月

 摘要:介绍 Microsoft(R) ActiveX(R) Data Objects (ADO) 在Visual C++中的使用,以及关于Visual C++ Extensions for ADO的讨论。

 

ADO就不用我介绍了吧,地球人都知道。我这里要介绍的是它在VC++中三种不同的使用方法。

第一种是直接使用控件,

第二种是各种文章介绍的最多的智能指针操作,

第三种则是笔者向大家极力推崇的Visual C++ Extensions for ADO,

另外,ADO既然是COM,也可以使用标准的调用com接口的方式使用它。

 

一、直接使用控件:

就是普通的OCX控件操作,简单的要命。

首先选中菜单Project->Add To Project->Components And Control…,在对话框中选中Registered ActiveX Controls目录下的Microsoft ADO Data Control 6.0 (SP4) (OLEDB)然后点击Insert,把ADO控件的类文件导入到当前工程之中。此时你的控件工具条(Controls工具条)上就多了一个浅绿色的控件,把拖到你的对话框中,……(作者此处删去500字)。

需要注意的是不要忘记包含各个导入类的头文件,否则编译通不过。

二、使用ADO的智能指针:

虽然相关介绍满天飞,为了保持文章的完整,还是简单介绍一下吧!

首先要在CMyApp::InitInstance()函数中加入

       //初始化Com环境

       if ( FAILED(::CoInitialize(NULL)) ) {

              ::AfxMessageBox( "Com Init Fail !" );

              ::exit(0);

       }

       在CMyApp::ExitInstance()函数中加入

              ::CoUninitialize();

       然后引入ADO库文件,一般是在stdAfx.h文件中添加

#import <msado15.dll> no_namespace rename( "EOF", "adoEOF" )

       这条语句会在工程所在目录生成msado15.tlh和msado15.tli两个文件。

在你的类声明文件中加入智能指针对象实例的定义,做为成员变量,

       _ConnectionPtr m_pConn;

_RecordsetPtr m_pRs;

使用之前先初始化,

//初始化ADO成员

TESTHR( m_pConn.CreateInstance(          __uuidof( Connection ) ) );

TESTHR( m_pRs.CreateInstance(      __uuidof( Recordset    ) ) );

其中TESTHR定义如下:

    void TESTHR(HRESULT x) {

           if FAILED(x)

               _com_issue_error(x);

    };①

然后就是连接数据库,获取Recordset……用不着我多说了吧,代码如下:

       //Open Connection

       TESTHR( m_pConn->Open( strConn/*连接字符串*/, "", "", adConnectUnspecified ) );

       //Open table

       TESTHR( m_pRs->Open( SQL/*SQL查询语句*/

                                           _variant_t((IDispatch*)m_pConn, true),

                                           adOpenKeyset,//adOpenForwardOnly,

                                           adLockReadOnly,

                                           adCmdText) );

三、使用Visual C++ Extensions for ADO(以下简称ADO Extensions)操作数据表。

这东东是专为VC++程序言准备的,笔者认为使用起来很方便。可遗憾的是相关介绍少之又少,连微软的MSDN上也只是寥寥数笔,真让人摸不着头脑。所以老衲只好根据自己的使用经验斗胆给大家讲讲了(莫笑哦!)。

要使用ADO Extensions 首先要完成以上第二种方法的所有步骤,实现ADO的智能指针调用,然后再实现一个IADORecordBinding类型的指针,用它将一个Recordset和一个定义好的类绑定到一起,这样你就可以象操作C++的类一样操作数据表了,还免去了自己处理VARIANT变量类型的诸多不便。

              首先定义一个与数据表相对应的类,用于绑定,

      

#include <icrsint.h>       //Head File Of IADORecordBinding

 

class CTabClass : public CADORecordBinding

{

BEGIN_ADO_BINDING(CTabClass)

   ADO_NUMERIC_ENTRY ( 1, adDecimal, m_nWID, 38/*精度*/, 0/*小数位*/, s_nWID,       false)②

                                          //( 列序号,字段类型,缓冲区,…)

   ADO_VARIABLE_LENGTH_ENTRY2( 2, adVarChar, m_Word, sizeof(m_Word), s_Word,    TRUE)

   ADO_FIXED_LENGTH_ENTRY ( 3, adSmallInt, m_nLWord,       s_nLWord, TRUE)

   ADO_VARIABLE_LENGTH_ENTRY2( 4, adChar, m_Attr, sizeof(m_Attr), s_Attr, TRUE)

   ADO_FIXED_LENGTH_ENTRY   ( 7,       adInteger,       m_nType, s_nType,       TRUE)

 END_ADO_BINDING()

 

public:

      //与各字段对应的变量

       DECIMAL       m_nWID;                 

       CHAR       m_Word[MAX_WORD+1];      

       INT         m_nLWord;                       

       INT         m_nType;                         

CHAR       m_Attr[MAX_ATTR+1];

//以上各变量绑定后的状态

       ULONG s_nWID;          

       ULONG s_nLWord;

     

[1] [2]  下一页


没有相关教程
教程录入: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……
    咸宁网络警察报警平台