В чем разница между источниками данных OLE DB и ODBC?

172

Я читал справочную статью MS Excel о сводной кэш-памяти и удивлялся, что они имеют в виду под источниками OLE DB и ODBC

... Вы должны использовать свойство CommandText вместо свойства SQL, которое теперь существует главным образом для совместимости с более ранними версиями Microsoft Excel. Если вы используете оба свойства, значение свойства CommandText имеет приоритет.

Для источников OLE DB свойство CommandType описывает значение свойства CommandText.

Для источников ODBC свойство CommandText функционирует точно так же, как и свойство SQL, а установка свойства приводит к обновлению данных ...

Я очень ценю ваши короткие ответы.

Martin08
источник
2
Просто примечание, согласно этой книге « Реализация хранилища данных с помощью Microsoft SQL Server 2012» : «Microsoft объявила, что в какой-то момент в ближайшем будущем поддержка соединений OLE DB будет прекращена в пользу соединений ODBC».
Б. Бургдорф
2
С 6 октября 2017 года, он не является устаревшим. См. Blogs.msdn.microsoft.com/sqlnativeclient/2017/10/06/…
Bogey Jammer

Ответы:

148

Согласно книге ADO: ActiveX Data Objects , написанной Джейсоном Т. Роффом, изданной O'Reilly Media в 2001 году (отличная диаграмма здесь), он точно говорит, что сказал MOZILLA.

(прямо со страницы 7 этой книги)

  • ODBC обеспечивает доступ только к реляционным базам данных
  • OLE DB предоставляет следующие функции
    • Доступ к данным независимо от их формата или местоположения
    • Полный доступ к источникам данных ODBC и драйверам ODBC

Поэтому может показаться, что OLE DB взаимодействует с источниками данных на основе SQL через уровень драйверов ODBC.

альтернативный текст

Я не уверен на 100%, что это изображение правильное. Два соединения, в которых я не уверен, это ADO.NET через ADO C-api и OLE DB через ODBC к источнику данных на основе SQL (потому что на этой диаграмме автор не предоставляет доступ OLE DB через ODBC, что, как мне кажется, это ошибка).

bobobobo
источник
7
Если OLE DB использует ODBC для подключения к источникам данных SQL, то ODBC должен поддерживать любой источник данных SQL, который поддерживается OLE DB, однако это не так - исходная диаграмма должна быть правильной (а не этой ).
Дэнни Варод
8
На самом деле иногда OLE DB оборачивает драйвер ODBC, иногда нет. Смотрите здесь
Бобобобо
3
В этой записи jamesmccaffrey.wordpress.com/2006/05/02/odbc-vs-ole-db говорится, что для SQL DS OLEDB проходит через ODBC.
Эрнан
1
@DannyVarod Ах, неважно. Я пропустил критический квалификатор в «любом источнике данных SQL, который поддерживается OLE DB ...». Я говорил о том, что, поскольку OLE DB поддерживает источники данных, не относящиеся к СУБД, вполне возможно, что нефильтрованный набор источников данных, поддерживаемых OLE DB, будет расширенным набором источников, поддерживаемых ODBC.
Асад Саидуддин
4
ADO.NET не оборачивает ADO. Классы ADO.NET обычно общаются напрямую со своей базой данных или сетевой библиотекой базы данных, а не через какой-либо другой уровень провайдера / драйвера. Например, System.Data.SqlClientобрабатывает протокол TDS в управляемом коде, используя только собственный код для обработки передачи TCP / Named Pipes / etc по сети. Для баз данных, у которых нет собственного управляемого поставщика, вы можете использовать System.Data.OleDbдля переноса OLE DB или System.Data.Odbcдля переноса ODBC, но это не рекомендуется.
Майк Диммик
55

ODBC: - Только для реляционных баз данных (Sql Server, Oracle и т. Д.)

OLE DB: - Для реляционных и нереляционных баз данных. (Oracle, Sql-Server, Excel, необработанные файлы и т. Д.)

MOZILLA
источник
4
Неправильно, оба могут общаться с нереляционными магазинами в зависимости от драйверов.
Энди Дент
1
Нет, с ODBC вы можете запрашивать даже простые CSV-файлы, а не только реляционные базы данных.
Вернфрид Домшайт
Неправильно! Там также текстовый файл и драйвер ODBC XML.
Скотт Чу
1
Я думаю, что это не правильно ... Open Database Connectivity (ODBC) is Microsoft's strategic interface for accessing data in a heterogeneous environment of relational and non- relational database management systems. support.microsoft.com/en-us/kb/110093
uzay95
11
LOL, ребята, вы говорите о ODBC в 2009 или 2016 году ...? это было правильно.
Юша Алеауб
42

Вот мое понимание (не авторитетное):

ODBC - это независимый от технологии открытый стандарт, поддерживаемый большинством поставщиков программного обеспечения. OLEDB - это API-интерфейс Microsoft, относящийся к конкретной технологии , начиная с эпохи COM (COM был компонентом и технологией взаимодействия до .NET)

В какой-то момент различные поставщики данных (например, Oracle и т. Д.), Желая быть совместимыми с потребителями данных Microsoft, разработали поставщиков OLEDB для своих продуктов, но по большей части OLEDB остается стандартом только для Microsoft. В настоящее время большинство источников данных Microsoft обеспечивают доступ как к ODBC, так и к OLEDB, в основном для совместимости с устаревшими потребителями данных ODBC. Кроме того, существует поставщик OLEDB (оболочка) для ODBC, который позволяет использовать OLEDB для доступа к источникам данных ODBC, если он того пожелает.

С точки зрения возможностей OLEDB значительно богаче, чем ODBC, но страдает синдромом «одно кольцо для правила их всех» (чрезмерно общий, чрезмерно сложный, бездумный).

В мире, отличном от Microsoft, поставщики данных и клиенты на основе ODBC широко используются и никуда не денутся.

Внутри Microsoft пузыря OLEDB постепенно сокращается в пользу собственных .NET API, построенных поверх того, что является собственным транспортным уровнем для этого источника данных (например, TDS для MS SQL Server).

zvolkov
источник
20

ODBC и OLE DB - две конкурирующие технологии доступа к данным. В частности, что касается SQL Server, Microsoft выдвинула их обоих в качестве предпочтительного направления на будущее, хотя и в разное время.

ODBC

ODBC - это общеотраслевой стандартный интерфейс для доступа к табличным данным. Первоначально он был разработан для баз данных и представляет данные в коллекциях записей, каждая из которых сгруппирована в коллекцию полей. Каждое поле имеет свой собственный тип данных, соответствующий типу данных, которые оно содержит. Каждый поставщик базы данных (Microsoft, Oracle, Postgres,…) предоставляет драйвер ODBC для своей базы данных.

Существуют также драйверы ODBC для объектов, которые, хотя они и не являются таблицами базы данных, достаточно похожи, так что полезен такой же доступ к данным. Примерами являются электронные таблицы, файлы CSV и столбчатые отчеты.

OLE DB

OLE DB - это технология Microsoft для доступа к данным. В отличие от ODBC он включает в себя как табличные, так и не табличные данные, такие как сообщения электронной почты, веб-страницы, документы Word и каталоги файлов. Однако он скорее ориентирован на процедуры, чем на объекты, и рассматривается как довольно сложный интерфейс для разработки доступа к источникам данных. Чтобы преодолеть это, ADO был разработан, чтобы быть объектно-ориентированным уровнем поверх OLE DB и обеспечивать более простой и высокоуровневый - хотя все еще очень мощный - способ работы с ним. Большим преимуществом ADO является то, что вы можете использовать его для управления свойствами, специфичными для данного типа источника данных, так же легко, как вы можете использовать его для доступа к тем свойствам, которые применяются ко всем типам источников данных. Вы не ограничены каким-либо неудовлетворительным наименьшим общим знаменателем.

Хотя все базы данных имеют драйверы ODBC, они не все имеют драйверы OLE DB. Однако существует интерфейс, доступный между OLE и ODBC, который можно использовать, если вы хотите получить к ним доступ в стиле OLE DB. Этот интерфейс называется MSDASQL (поставщик Microsoft OLE DB для ODBC).

Технологии доступа к данным SQL Server

Поскольку SQL Server является (1) , сделанная Microsoft, и (2) платформа базы данных Microsoft, как ODBC и OLE DB является естественным для него.

ODBC

Поскольку все другие платформы баз данных имели интерфейсы ODBC, Microsoft, очевидно, должна была предоставить один для SQL Server. В дополнение к этому DAO, оригинальная технология по умолчанию в Microsoft Access, использует ODBC в качестве стандартного способа общения со всеми внешними источниками данных. Это сделало интерфейс ODBC непременным условием. Драйвер ODBC версии 6 для SQL Server, выпущенный вместе с SQL Server 2000, все еще существует. Обновленные версии были выпущены для обработки новых типов данных, технологий подключения, шифрования, HA / DR и т. Д., Которые появились в последующих выпусках. По состоянию на 07/07/2018 самым последним выпуском является версия 13.1 «Драйвер ODBC для SQL Server», выпущенная 23/03/2018.

OLE DB

Это собственная технология Microsoft, которую они активно продвигали примерно с 2002 по 2005 год вместе с сопутствующим уровнем ADO. Очевидно, они надеялись, что это станет технологией доступа к данным. (Они даже сделали ADO методом по умолчанию для доступа к данным в Access 2002/2003.) Однако в конечном итоге стало очевидно, что этого не произойдет по ряду причин, таких как:

  1. Мир не собирался переходить на технологии Microsoft и далеко от ODBC;
  2. DAO / ODBC был быстрее, чем ADO / OLE DB, а также был полностью интегрирован в MS Access, поэтому не умер естественной смертью;
  3. Новые технологии, разрабатываемые Microsoft, в частности ADO.NET, также могут напрямую взаимодействовать с ODBC. ADO.NET также может напрямую взаимодействовать с OLE DB (таким образом, оставляя ADO в захолустье), но он (в отличие от ADO) не зависит исключительно от него.

По этим и другим причинам Microsoft фактически осудила OLE DB как технологию доступа к данным для выпусков SQL Server после v11 (SQL Server 2012). За пару лет до этого момента они создавали и обновляли собственный клиент SQL Server, который поддерживал технологии ODBC и OLE DB. Однако в конце 2012 года они объявили, что будут использовать ODBC для нативного доступа к реляционным данным в SQL Server, и призвали всех остальных сделать то же самое. Они также заявили, что выпуски SQL Server после v11 / SQL Server 2012 будут активно не поддерживать OLE DB!

Это объявление вызвало бурю протеста. Люди были в замешательстве, чтобы понять, почему MS внезапно осуждает технологию, которую они потратили годы, чтобы заставить их принять на себя обязательства. Кроме того, SSAS / SSRS и SSIS, которые были написанными MS-приложениями, тесно связанными с SQL Server, полностью или частично зависели от OLE DB. Еще одна жалоба заключалась в том, что у OLE DB были определенные желательные функции, которые казалось невозможным перенести обратно на ODBC - в конце концов, у OLE DB было много положительных моментов.

В октябре 2017 года Microsoft уступила и официально отказалась от OLE DB . Они объявили о скором появлении нового драйвера (MSOLEDBSQL), который будет иметь существующий набор функций Native Client 11, а также внедрит отказоустойчивость нескольких подсетей и поддержку TLS 1.2. Водитель был выпущен в марте 2018 года.

marktwo
источник
@ChieltenBrinke Я собрал сообщение из нескольких источников, таких как ссылки, которые я обновил в своем сообщении, чтобы включить и, что не менее важно, комментарии, которые они спровоцировали. Другими источниками были книга Джейсона Роффа об ADO, упомянутая bobobobo, и The Access 2002 Desktop Developer Handbook от Litwin, Getz и Gunderloy (настоящий старый, но настоящий классический). У меня нет никакого внутреннего следа в Microsoft, поэтому мои предположения о том, что стоит за их различными изменениями направления, хотя и правдоподобны, полностью принадлежат мне.
marktwo
6

На базовом уровне это просто разные API для разных источников данных (т.е. баз данных). OLE DB новее и, возможно, лучше.

Вы можете прочитать больше об обоих в Википедии:

  1. OLE DB
  2. ODBC

Т.е. вы можете подключиться к той же базе данных, используя драйвер ODBC или драйвер OLE DB. Разница в поведении базы данных в этих случаях заключается в том, к чему относится ваша книга.

Илья Кочетов
источник
4
Как и со многими предметами, связанными с ИТ, все почти прошло полный круг. SQL 2012 был последней версией, поддерживающей собственный поставщик OLE DB, и приложения теперь должны переключаться на обратную ODBC. как в "старые времена" SQL Server technet.microsoft.com/en-us/library/hh967418.aspx
Крис Вуд,
4
«OLE DB новее и, возможно, лучше», это могло быть правдой в 2008 году, но не в 2014 году.
Майкл Дэвид Уотсон,
@MichaelDavidWatson Так что бы вы сказали. Лучше использовать ODBC или OLEDB? Мне нужно поддерживать как можно больше разных баз данных SQL. И как это указывает, OLE DB может также получить доступ к источнику данных ODBC. Так почему бы вам сказать, что «OLE DB новее и, возможно, лучше» все еще неверен в 2015 году? :)
LuckyLikey
@LuckyLikey MS устарела в OLEDB, и SQL Server больше не поддерживает ее (SS 2012 поддержал ее последней). msdn.microsoft.com/en-us/library/hh967418.aspx
Робиньо
5

Оба являются поставщиками данных (API, который ваш код будет использовать для связи с источником данных). Oledb, который был представлен в 1998 году, должен был заменить ODBC (представлен в 1992 году).

Арктур
источник
3

Я не уверен во всех деталях, но я понимаю, что OLE DB и ODBC - это два API-интерфейса, которые доступны для подключения к различным типам баз данных без необходимости иметь дело со всеми деталями реализации каждого из них. Согласно статье в Википедии об OLE DB , OLE DB является наследником ODBC от Microsoft и предоставляет некоторые функции, которые вы, возможно, не сможете использовать с ODBC, такие как доступ к электронным таблицам в качестве источников базы данных.

user10340
источник
2

На веб-сайте Microsoft показано, что собственный поставщик OLEDB применяется непосредственно к SQL-серверу, а другой поставщик OLEDB называется OLEDB Provider для ODBC для доступа к другим базам данных, таким как Sysbase, DB2 и т. Д. В OLEDB Provider есть разные типы компонентов. Посмотрите Распределенные Запросы на MSDN для получения дополнительной информации.

FebWind
источник
0

ODBC работает только для реляционных баз данных, он не может работать с нереляционными базами данных, такими как файлы MS Excel. Где Олебд может все.

Д-р Шахриар
источник
-3

Чтобы узнать, почему M $ изобретает OLEDB, вы не можете сравнить OLEDB с ODBC. Вместо этого вы должны сравнить OLEDB с DAO, RDO или ADO. Последний в значительной степени опирается на SQL. Тем не менее, OLEDB опирается на COM. Но ODBC существует уже много лет, поэтому существуют мосты OLEDB-ODBC, чтобы исправить это. Я думаю, что есть большая картина, когда M $ изобретает OLEDB.

Скотт Чу
источник