2016-11-15 4 views
2

Книга в this StackOverflow вопрос гласит:OLE DB и язык программирования зависимость (по сравнению с ADO)

Имейте в виду, что OLE DB был разработан для поставщиков программного обеспечения, которые разрабатывают данных приложений на основе подвергать эти данные в вы, разработчик конечного пользователя , через согласованный интерфейс. OLE DB быстрый, эффективный, и мощный. Он имеет все, что разработчик ищет в технологии доступа к данным . Он предлагает доступ к любому источнику данных, известному человеку (или к Windows, если на то пошло), и он обеспечивает доступ к этим данным источников с согласованным интерфейсом, независимо от источника данных. Проблема с OLE DB заключается в том, что, как и ODBC, она недоступна для Visual Основные и другие разработчики, поскольку она основана на API-интерфейсе C. Разработчикам Visual Basic, в частности, необходимо больше.

1.1.3

ADO Введите объекты данных ActiveX (ADO). ADO, интерфейс прикладного уровня для OLE DB, является последней, самой большой частью стратегии Microsoft UDA . Он сочетает в себе лучшие возможности своих предшественников, DAO и RDO, и добавляет доступность OLE DB для программистов VBA. ADO предоставляет согласованное, средство, независимое от языка, для доступа к данным практически из любого источника , включая текстовые или другие устаревшие данные в реляционных и нереляционных форматах. (Теперь вы можете понять, почему я должен объяснить некоторые алфавита суп, прежде чем попасть в ADO себя.)

Но, глядя на OLE DB reference, OLE DB ссылка состоит из COM-интерфейсов.

  1. Если OLE DB ссылка состоит из COM-интерфейсов, не означает ли это, что OLE DB является языком независимого, потому что вся цель использования COM, чтобы сделать вещи языконезависимыми?

  2. Почему бы назвать OLE DB API-интерфейсом C, если этот API состоит из COM-интерфейсов - эти интерфейсы имеют методы, и, следовательно, эти интерфейсы уже являются похожими на объекты в объектно-ориентированном программировании? (vs C-style API, который я бы связал больше с набором функций)

  3. Если OLE DB зависит от языка, то какие языки могут использовать API OLE DB? (это C или C++ или оба или, возможно, другие)

  4. Если можно создать экземпляр интерфейса OLE DB с помощью функции CoCreateInstance(), не может ли использоваться та же самая функция (или ее отделение в VB) в Visual Basic для создания экземпляра этого интерфейса в VB?

ответ

4

Общепринятым (если возможно, вводящим в заблуждение) является ссылка на полнофункциональный COM-интерфейс как «C-стиль».

Чтобы быть более точным, интерфейсы OLE DB являются COM-интерфейсами, да, и они не зависят от языка на 100%, если ваш язык выбора полностью поддерживает COM. Однако они не являются совместимыми с Automation интерфейсами.

Visual Basic поддерживает только подмножество всего, что поддерживает COM. Вам нужно сделать все, чтобы использовать интерфейсы OLE DB, которые не поддерживаются Visual Basic.

Рассмотрите IRowset::GetData, например. Для хранения записи требуется предварительно выделенный буфер памяти void*. В Visual Basic нет простого способа обеспечить это.

Это еще хуже для VBScript, так как он требует, чтобы вы обрабатывали все данные с помощью вариантов. OLE DB использует собственный тип типа int, который VBScript не может предоставить.

В отличие от этого, ADO - это оберточный слой, который совместим с автоматикой и может использоваться с VB6, VBScript и VBA.

Смежные вопросы