в чому різниця між джерелами даних OLE DB та ODBC?


171

Я читав довідкову статтю MS Excel про pivotcache та цікавився, що вони означають джерелами OLE DB та ODBC

... Вам слід використовувати властивість CommandText замість властивості SQL, яка зараз існує в основному для сумісності з більш ранніми версіями Microsoft Excel. Якщо ви використовуєте обидва властивості, значення властивості CommandText має перевагу.

Для джерел OLE DB властивість CommandType описує значення властивості CommandText.

Для джерел ODBC властивість CommandText функціонує точно так само, як і властивість SQL, а встановлення властивості призводить до оновлення даних ...

Я дуже ціную ваші короткі відповіді.


2
Відповідно до цієї книги, згідно з цією книгою " Впровадження сховища даних з Microsoft SQL Server 2012" : "Microsoft оголосила, що в якийсь момент найближчим часом підтримка з'єднань OLE DB буде знята на користь з'єднань ODBC".
Б. Бургдорф

2
Починаючи з 6 жовтня 2017 року, він є недооціненим. Дивіться blogs.msdn.microsoft.com/sqlnativeclient/2017/10/06/…
Bogey Jammer

Відповіді:


147

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

(безпосередньо зі сторінки 7 цієї книги)

  • ODBC забезпечує доступ лише до реляційних баз даних
  • OLE DB надає наступні можливості
    • Доступ до даних незалежно від її формату чи місцезнаходження
    • Повний доступ до джерел даних ODBC та драйверів ODBC

Отже, здавалося б, що OLE DB взаємодіє з джерелами даних на базі SQL ТРУ драйверного рівня ODBC.

alt текст

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


7
Якщо OLE DB використовує ODBC для підключення до джерел даних SQL, то будь-яке джерело даних SQL, яке підтримується OLE DB, повинно підтримуватися ODBC, однак це не так - початкова схема повинна бути правильною (а не цією) ).
Danny Varod

8
Насправді іноді OLE DB загортає драйвер ODBC, іноді - ні. Дивіться тут
bobobobo

3
Цей запис jamesmccaffrey.wordpress.com/2006/05/02/odbc-vs-ole-db говорить, що для SQL DS OLEDB переходить через ODBC.
Ернан

1
@DannyVarod Ах, неважливо. Я пропустив критичний класифікатор у "будь-якому джерелі даних SQL, який підтримується OLE DB би ...". Я говорив про те, що оскільки OLE DB підтримує джерела даних, що не належать до RDBMS, цілком можливо, що нефільтрований набір джерел даних, що підтримується OLE DB, є сукупністю тих, що підтримуються ODBC.
Asad Saeeduddin

4
ADO.NET не завершує ADO. Класи ADO.NET зазвичай спілкуються безпосередньо зі своєю базою даних або мережевою бібліотекою бази даних, а не через будь-який інший рівень провайдера / драйвера. Наприклад, System.Data.SqlClientобробляє протокол TDS в керованому коді, використовуючи лише власний код для обробки передачі TCP / Named Pipes / тощо по мережі. Для баз даних, у яких немає власного керованого постачальника, ви можете використовувати System.Data.OleDbдля завершення OLE DB або System.Data.Odbcзавершення ODBC, але це не рекомендується.
Майк Діммік

55

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

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


4
Неправильно, обидва можуть розмовляти з нереляційними магазинами залежно від водіїв.
Енді Дент

1
Ні, за допомогою ODBC ви можете запитувати навіть плоскі CSV-файли, а не лише реляційні бази даних.
Wernfried Domscheit

Неправильно! Також є текстовий файл та драйвер XML ODBC.
Скотт Чу

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
хаха, хлопці, ви говорите про ODBC у 2009 чи 2016 році ...? це було правильно.
Yousha Aleayoub

42

Ось моє розуміння (не авторитетне):

ODBC - це технологічно-агностичний відкритий стандарт, який підтримується більшістю постачальників програмного забезпечення. OLEDB - це специфічний для Microsoft API API з епохи COM (COM був компонентом і технологією сумісності раніше .NET)

У якийсь момент різні постачальники даних, що користуються інформацією (наприклад, Oracle тощо), готові бути сумісними зі споживачами даних Microsoft, розробили постачальників OLEDB для своїх продуктів, але здебільшого OLEDB залишається стандартом лише для Microsoft. Зараз більшість джерел даних Microsoft дозволяють отримувати доступ як до ODBC, так і до OLEDB, в основному для сумісності із застарілими споживачами даних ODBC. Крім того, для ODBC існує провайдер OLEDB (обгортка), який дозволяє використовувати OLEDB для доступу до джерел даних ODBC, якщо він цього бажає.

З точки зору особливостей OLEDB значно багатший за ODBC, але страждає від синдрому "один-до-правити-всі" (надмірно загальний, надскладний, не викликає сумнівів).

У світі, що не належить Microsoft, постачальники даних і клієнти, що базуються на ODBC, широко використовуються і нікуди не дістаються.

Всередині бульбашки Microsoft OLEDB припиняється на користь вроджених .NET API, які надбудовуються поверх того, що є рідним транспортним шаром для цього джерела даних (наприклад, TDS для MS SQL Server).


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-like. Цей інтерфейс називається 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 останній реліз - v13.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). За кілька років до цього моменту вони виробляли та оновлювали Native Client SQL Server, який підтримував як ODBC, так і технології OLE DB. Однак наприкінці 2012 року вони оголосили, що будуть узгоджуватися з ODBC для нативного реляційного доступу до даних на SQL Server, і закликали всіх інших робити те саме. Вони також заявили, що версії SQL Server після v11 / SQL Server 2012 активно не підтримують OLE DB!

Це оголошення спровокувало бурю протесту. Люди втрачали розуміння того, чому МС раптом знецінила технологію, яку вони витратили протягом багатьох років, змусивши їх взяти на себе зобов’язання. Крім того, SSAS / SSRS і SSIS, які були написаними MS програмами, тісно пов'язаними з SQL Server, повністю або частково залежали від OLE DB. Ще одна скарга полягала в тому, що OLE DB має певні бажані функції, які, здавалося, неможливо перенести назад до ODBC - адже OLE DB мав багато хороших моментів.

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


@ChieltenBrinke Я спільно написав публікацію з кількох джерел, таких як посилання, в яких я оновив свою публікацію, щоб включити, і, щонайменше, коментарі, які вони спровокували. Інші джерела - книга Джейсона Роффа про ADO, яку згадує bobobobo, і довідник для розробників настільних розробників The Access 2002, автор Літвіна, Гетца та Гундерлой (справжня стара, але справжня класика). У мене немає ніяких внутрішніх доріжок у Microsoft, тому мої міркування щодо думки про їх різні зміни напрямку, хоча і правдоподібні, цілком власні.
marktwo

6

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

Ви можете прочитати більше про обидва у Вікіпедії:

  1. OLE DB
  2. ODBC

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


4
Як і в багатьох предметах, що стосуються ІТ, речі майже набрали повний коло. SQL 2012 був останньою версією, що підтримує постачальник OLE DB Native, і тепер програми повинні перейти на задній ODBC. як "старі дні" SQL Server technet.microsoft.com/en-us/library/hh967418.aspx
Кріс Вуд

4
"OLE DB є новішим і, мабуть, кращим", це могло бути правдою в 2008 році, але не в 2014 році.
Майкл Девід Уотсон

@MichaelDavidWatson Так що б ви сказали. Краще використовувати ODBC oder OLEDB? Мені потрібно підтримувати якомога більше різних баз даних SQL. І як вказується, OLE DB також може отримати доступ до джерела даних ODBC. То чому б ви сказали, що "OLE DB є новішим і, мабуть, кращим", все ще невірно в 2015 році? :)
LuckyLikey

@LuckyLikey MS застаріли OLEDB, і SQL Server більше не підтримує його (SS 2012 був останнім). msdn.microsoft.com/en-us/library/hh967418.aspx
Robino

5

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



3

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


2

На веб-сайті Microsoft видно, що рідний постачальник OLEDB застосовується безпосередньо до SQL-сервера, а інший постачальник OLEDB під назвою OLEDB Provider для ODBC для доступу до інших баз даних, таких як Sysbase, DB2 і т.д. Існують різні види компонентів у постачальника OLEDB. Додаткову інформацію див. У розділі Розподілені запити на MSDN .


0

ODBC працює лише для реляційних баз даних, він не може працювати з нереляційними базами даних, такими як файли Ms Excel. Де Олебд може все робити.


-3

Щоб знати, чому M $ винаходить OLEDB, ви не можете порівнювати OLEDB з ODBC. Натомість слід порівнювати OLEDB з DAO, RDO або ADO. Останній багато в чому покладається на SQL. Однак OLEDB покладається на COM. Але ODBC вже існує багато років, тож є мости OLEDB-ODBC, щоб виправити це. Я думаю, що існує велика картина, коли M $ винаходить OLEDB.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.