OLE DB和编程语言依赖(vs ADO)

时间:2016-11-15 02:51:29

标签: com odbc oledb ado

this StackOverflow问题中的书:

  

请记住,OLE DB是为开发的软件供应商设计的   基于数据的应用程序,以向最终用户公开该数据   开发人员,通过一致的界面。 OLE DB快速,高效,   而且强大。它包含了开发人员在数据访问中寻找的所有内容   技术。它可以访问人类已知的任何数据源(或   Windows,就此而言),它提供对这些数据的访问   具有一致接口的源,无论数据源如何。的的   OLE DB的问题是,与ODBC一样,Visual无法访问它   基础和其他开发人员,因为它基于C风格的API。   特别是Visual Basic开发人员需要更多。

     

1.1.3

     

ADO输入ActiveX数据对象(ADO)。 ADO是OLE DB的应用程序级接口,是Microsoft最新的UDA   战略。它结合了其前辈DAO和的最佳功能   RDO,并为VBA程序员添加OLE DB可访问性。 ADO提供了一个   一致的,语言无关的意味着来访问几乎任何数据   来源,包括关系中的基于文本或其他遗留数据   非关系格式。 (你现在可以看到为什么我需要解释一些   在进入ADO之前的字母汤。)

但是看OLE DB reference,OLE DB引用由COM接口组成。

  1. 如果OLE DB引用由COM接口组成,那是不是意味着OLE DB是语言独立,因为使用COM的整个目的是使语言独立?

  2. 为什么一个人将OLE DB称为C风格的API,如果该API包含COM接口 - 那些接口有方法,那么这些接口在面向对象编程中已经有点像对象了? (对比C风格的API,我会将其与一堆函数联系起来)

  3. 如果OLE DB依赖于语言,那么可以使用OLE DB API的语言是什么? (它是C或C ++还是两者,或者也许是其他人)

  4. 如果可以使用CoCreateInstance()函数创建OLE DB接口的实例,则无法在Visual Basic中使用相同的函数(或其VB中的隔离专区)来创建该实例VB中的界面?

1 个答案:

答案 0 :(得分:4)

将功能齐全的COM接口称为" C-style"这是常见的(如果可能是误导性的)。

更确切地说,OLE DB接口是COM接口,是的,它们是100%独立于语言的,只要您选择的语言完全支持COM。但是,它们不是与自动化兼容的接口。

Visual Basic仅支持COM支持的所有内容的子集。您需要执行一些操作才能使用Visual Basic不支持的OLE DB接口。

例如,考虑IRowset::GetData。它需要void*到先前分配的正确大小的内存缓冲区来保存记录。在Visual Basic中没有简单的方法来提供它。

VBScript的情况更糟,因为它要求您通过Variants处理所有数据。 OLE DB使用VBScript无法提供的int等本机类型。

相比之下,ADO是一个自动化兼容的包装层,可以在VB6,VBScript和VBA中使用。