2016-11-15 25 views
2

该书this StackOverflow的问题指出:OLE DB和编程语言的依赖性(VS ADO)

请记住,OLE DB是专为软件供应商谁开发 基于数据的应用程序,以公开该数据你,终端用户 开发者,通过一个一致的界面。 OLE DB速度快,效率高,功能强大。它具有开发人员在数据访问技术中寻找的所有内容。它提供对人们已知的任何数据源的访问权限(或针对该事件的Windows),并且它提供对具有一致接口的这些数据源的访问,而不管数据源如何。 与OLE DB相关的 问题与ODBC一样,Visual Basic Basic和其他开发人员无法访问它,因为它基于C风格的API。 特别是Visual Basic开发人员需要更多。

1.1.3

ADO输入ActiveX数据对象(ADO)。 ADO是OLE DB的应用程序级接口,是微软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接口的实例,那么可以使用该函数(或其VB中的隔离区) Visual Basic在VB中创建该接口的实例?

回答

4

将全功能的COM接口称为“C风格”是很常见的(如果可能是误导)。

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

Visual Basic仅支持COM支持的所有内容的子集。有些事情您需要使用Visual Basic不支持的OLE DB接口。例如,可以考虑IRowset::GetData。它需要一个void*到以前分配的正确大小的内存缓冲区来保存该记录。在Visual Basic中没有简单的方法来提供它。

VBScript更糟糕,因为它需要你通过变量处理所有数据。 OLE DB使用VBScript无法提供的本地类型,如int

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