转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> 其他 >> 正文
VC数据库编程分析         ★★★★

VC数据库编程分析

作者:闵涛 文章来源:闵涛的学习笔记 点击数:581 更新时间:2009/4/22 23:21:01

  我们知道,在VB下进行基于ADO的编程相对比较简单,只要我们通过reference加载了适当的类型库以后,我们就可以正常的调用ADO对象,但是可能很多开发人员对于VC下的基于ADO,OLE DB的数据库开发就没有很多经验了。所以我们有必要先讨论一下VC下基于ADO开发的几种模式。

  VC下关于ADO的操作分析

  一般来说,用VC++有三种方法可以实现对ADO的操作:

  1. 通过#import方法

  2. 通过利用MFC OLE的ClassWizard

  3. 通过Windows API中COM相关的函数

在所有这三种方法种,#import是最方便的方法,它允许你产生一个类似VB的类结构。使你的开发变的很方便。

  #import方法

  在#import中,你需要提供所包含的类型库的路径和名称,它能够自动产生一个对GUIDs的定义,同时对自动生成对ADO对象的封装。同时,能够列举它在类型库中所能找到的类型,对任何你所引用的类型库,VC++会在编译的时候自动生成两个文件:

  一个头文件(.tlh),它包含了列举的类型和对类型库中对象的定义

  一个实现文件(.tli)对类型库对象模型中的方法产生封装。

比如,你在stdafx.h文件中增加对msado15.dd的import以后,VC++会产生msado15.tlh和msado15.tli两个文件。

  #import也能够使用一个新的类,_com_ptr_t,也被称为智能指针。智能指针能够自动执行QuyerInterface,AddRef和Release函数。对一个COM对象模型使用#import产生代码和VBA很类似。

  下面的代码演示了如何使用#import在你的应用中实现对ADO的操作:

  #import "c:\program files\common files\system\ado\msado15.dll" \

  no_namespace

  rename ( "EOF", "adoEOF" )

对EOF进行该名是必要的,因为典型的VC++应用都已经定义了EOF作为常数-1。

  下面分析用#import定义和初始化ADO对象

  通常来说,操作一个自动化对象需要两个步骤:定义和初始化一个用来操作COM对象的变量。通过#import你可以在一行代码完成这个工作,通过使用智能指针(_com_ptr_t)的构造函数传递一个有效的CLSID或者是PROGID。开发人员也可以通过_com_ptr_t::CreateInstance()方法来定义对象的一个示例。具体代码如下所示:

  _ConnectionPtr Conn1( __uuidof( Connection ) );

也可以采用下面的代码实现同样的功能

  _ConnectionPtr Conn1 = NULL; file://定义对象

  HRESULT hr = S_OK;

  hr = Conn1.CreateInstance( __uuidof( Connection ) ); file://创建实例

推荐采用第二种方法,因为如果用第一种方法的话不能返回一个失败的HRESULT,所以也就不能判断ADO连接对象是成功还是失败。注意这里的__uuidof( Connection)中的Connection是在.tlh文件中定义的。通过把它传递给方法CreateInstance,实际上就是创建了一个有效的ADOConnection对象。

  需要注意到的是#import中有一个属性为no_namespace,这是告诉编译器该类不在一个单独的名字空间中,使用no_namespace意味着你不需要在初始化变量的时候引用名字空间。当然如果在你的应用中需要倒入多个类型库的话,最后不要使用no_namespace,以免引起名字冲突。

  下面是简单的基于ADO应用的代码,采用了#import方法:

  #include

  #import rename("EOF", "adoEOF")

  void main()

   {

    HRESULT hr = S_OK;

    file://因为没有在#import中指定no_namespace,所以必须采用ADODB::这样的形式

    file://来作为变量类型

    ADODB::_RecordsetPtr Rs1 = NULL;

    file://通过ODBC建立ADO连接

    _bstr_t Connect( "DSN=AdoDemo;UID=sa;PWD=;" );

    _bstr_t Source ( "SELECT * FROM Authors" );

    CoInitialize();

    file://初始化Rs1对象

    hr = Rs1.CreateInstance( __uuidof( ADODB::Recordset ) );

    file://对hr的返回正确性判断省略

    Rs1->Open( Source, Connect,

    ADODB::adOpenForwardOnly,

    ADODB::adLockReadOnly, -1 );

    file://这里可以对记录集Rs1进行操作

    Rs1->Close();

    Rs1 = NULL;

    ::MessageBox( NULL, "Success!", "", MB_OK );

    CoUninitialize();

   }


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

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

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉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……
    咸宁网络警察报警平台