ADO和OLE-DB棗同一疑难不同层次地处理办法

    使用ADO时一件让人困惑的事是,需要理解它不是数据库访问的底层解决方案。OLE-DB是使用ADO的基础;它也提供与数据库通信的基础。ADO只是OLE-DB提供的服务的漂亮包装。事实上,如果你愿意,甚至可以绕过ADO而直接使用OLE-DB。但是,使用ADO开发应用程序的速度要快得多。下面的章节会帮助你理解OLE-DB和ADO。
     理解OLE-DB
    那么,OLE-DB是什么呢?顾名思义,它用OLE(或者更具体一点,是部件对象模型棗COM)为数据访问提供一套接口。就像任何其它的COM对象一样,可以查询、创建和撤销一个OLE-DB对象。OLE-DB对象的来源被称为提供者。你会得到各种OLE-DB提供者,它们是Visual C++软件包的一部分,也有可能在厂商升级其数据库产品时提供。OLE-DB的好处是,同一个提供者可以和任何Visual Studio产品协作:Visual C++,Visual Basic,Visual InterDev和Visual J++。
    OLE-DB还依赖于事件,这和任何COM对象一样。这些事件说明什么时候要求更新数据库表,以显示其它用户生成的新项,或者你所请求的表什么时候准备好供查看。还会看到这样的事件,它们用来发送信号通知各种数据库错误和其它要求马上轮询的活动。
    Microsoft定义了OLE-DB用户的四个主要类型。下面将各组予以分解,从总体上说明它们是如何帮助使用OLE-DB的。
    数据提供者 用OLE-DB SDK(软件开发工具箱)创建OLE-DB提供者的人。提供者用户与数据库和事件交互作用,发信号通知特殊事情的发生。
    数据消费者 要求访问包含在数据库中的信息的应用程序、系统驱动程序或用户。
    数据服务提供者 创建用以增强用户或管理员使用或管理数据库内容能力的独立实用程序(服务)的开发者。例如,开发者可以创建查询引擎,允许用户用自然语言请求数据库中的信息。服务和OLE-DB提供者互相协作,成为一个整体。
    商务部件开发者 创建应用程序模块或部件,以减少创建数据库应用程序所需的编码量的开发者。部件可能和网格控件一样通用,可以快速地显示数据库中记录的子集,或者显示正被访问的数据库类型的专用信息。
    那么,OLE-DB和ODBC有什么不同呢?表4.1说明了这两个产品间的主要差别。我们会在本章的“应该在什么时候使用OLE-DB、ADO或ODBC?”一节中讨论这些差别是如何影响你的使用决定的。
    不要认为OLE-DB和ODBC是两种完全分离、可以互相替换的技术。ODBCOLE-DB提供者允许你通过OLE-DB或ADO 访问ODBC提供的所有功能。换言之,这两种技术是互补的,不能完全互相替换。可以用ADO或OLE-DB替换ODBC吗?可以,但如果这样做了,将得不到最佳的应用程序性能。OLE-DB的整体作用是,拓宽可以用Visual C++应用程序访问的数据库类型的范围。很明显,如果确实要用单个应用程序访问ODBC和列表数据,那么OLE-DB为此提供了较好的解决办法。
     理解ADO
    现在你对OLE-DB比较熟悉了,那么ADO适合在哪里使用呢?如前所述,ADO为访问OLE-DB提供者的功能提供了一种容易的方法。换言之,ADO允许你快速地创建应用程序,允许Visual C++处理你在直接使用OLE-DB时通常应考虑的一些细节。我已经在第一章关于ADO数据连接的章节中提供了关于ADO特征的概述,这里就不再讨论了。

    与OLE-DB一样,ADO也是基于COM的。它提供了一个双重接口:对本地操作是ADODB的程序ID,对远程操作是ADOR的程序ID。虽然注册表像使用分室线程模型那样显示ADO线程,但ADO库本身是种自由线程。ADO的线程安全依赖于你所使用的OLE-DB提供者。换言之,如果使用Microsoft的ODBC OLE-DB提供者,不会有任何问题。如果使用第三方的OLE-DB提供者,要在假定ADO线程安全之前检查厂商的文档(这是在Internet或企业网连接上使用ADO时的要求)。
    使用ADO时会用到七个不同的对象。表4.2列出了这些对象,并描述了它们的使用方法。虽然ADO对象的功能层次要比先前技术提供的层次高得多,但其中多数对象类型是Microsoft已引进的其它技术的复制品。我们会在本章的概述一节更为详细地讨论ADO的类。
    注释 一些ADO对象由接口而不是由实际类来表示。表4.2还说明了对象的关联关系,它帮助你理解如何导出并非由Visual C++类直接表示的对象。

 

 

<script language="javascript" src="http://www.ITxv.com/show/pcv1con1picasa.js" type="text/javascript"></script> <script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script> <script language="JavaScript1.1" src="http://pagead2.googlesyndication.com/cpa/ads?client=ca-pub-1728715438481494&cpa_choice=CAAQlOaNggIaCBjR-wPj5YIvKJDctIQB&oe=gb2312&dt=1170048285859&lmt=1168864603&prev_fmts=ref_text&format=ref_text&output=textlink&channel=1078261053&url=http%3A%2F%2Fwww.qqgb.com%2FProgram%2FVC%2FVCJC%2FProgram_54351.html&region=_google_cpa_region_&ref=http%3A%2F%2Fwww.google.com%2Fsearch%3Fq%3DOLE%2BDB%2BADO%2B%25E5%2585%25B3%25E7%25B3%25BB%26hl%3Dzh-CN%26lr%3Dlang_zh-CN%26inlang%3Dzh-CN%26newwindow%3D1%26start%3D10%26sa%3DN&cc=150&u_h=1024&u_w=1280&u_ah=994&u_aw=1280&u_cd=32&u_tz=480&u_java=true" type="text/javascript"></script> Goog 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值