OLE DBとODBCデータソースの違いは何ですか?


171

私はピボットキャッシュに関するMS Excelヘルプ記事を読んでいて、それらがOLE DBおよびODBCソースで何を意味するのか不思議に思っていました

... SQLプロパティの代わりにCommandTextプロパティを使用する必要があります。SQLプロパティは、以前のバージョンのMicrosoft Excelとの互換性のために主に存在しています。両方のプロパティを使用する場合、CommandTextプロパティの値が優先されます。

ためのOLE DBソース、CommandTypeプロパティは、CommandTextプロパティの値を記載しています。

以下のためのODBCソース、正確にSQLプロパティなどのCommandTextプロパティ機能、およびプロパティを設定すると、リフレッシュするデータが発生します...

私はあなたの短い答えに本当に感謝しています。


2
この本によると、Microsoft SQL Server 2012を使用したデータウェアハウスの実装によると、「Microsoftは近い将来、ODBC接続のためにOLE DB接続のサポートが削除されることを発表しました。」
B.バーグドルフ2017年

2
2017年10月6日以降、サポートは終了していません。blogs.msdn.microsoft.com/sqlnativeclient/2017/10/06/…を
Bogey Jammer

回答:


147

ADO:ActiveX Data Objectsよると、2001年にO'Reilly Mediaから出版されたJason T. Roffの本(優れた図はこちら)によると、モジラが言ったことを正確に語っています。

(その本の7ページから直接)

  • ODBCはリレーショナルデータベースへのアクセスのみを提供します
  • OLE DBは次の機能を提供します
    • 形式や場所に関係なくデータにアクセス
    • ODBCデータソースとODBCドライバーへの完全アクセス

したがって、OLE DBは、ODBCドライバーレイヤーを介してSQLベースのデータソースとやり取りしているように見えます。

代替テキスト

この画像が正しいかどうかは100%わかりません。 私がよくわからない2つの接続は、ADO.NETからADO C-api、およびODBCからSQLベースのデータソースへのOLE DBです(この図では、著者はOLE DBのアクセスをODBC経由にしないため、間違いです)。


7
OLE DBがODBCを使用してSQLデータソースに接続する場合、OLE DBでサポートされているSQLデータソースはODBCでサポートされている必要がありますが、これは当てはまりません-元のダイアグラムは正しいはずです(これはそうではありません) )。
ダニーヴァロッド

8
実際、OLE DBはODBCドライバーをラップする場合とラップしない場合があります。 ここを参照
bobobobo

3
このエントリjamesmccaffrey.wordpress.com/2006/05/02/odbc-vs-ole-dbは、SQL DSの場合、OLEDBがODBCを経由することを示しています。
エルナン

1
@DannyVarodああ、気にしないで。「OLE DBでサポートされているSQLデータソースは...」の重要な修飾子を逃しました OLE DBはRDBMS以外のデータソースをサポートしているため、OLE DBでサポートされているフィルター処理されていないデータソースのセットを、ODBCでサポートされているデータソースのスーパーセットにすることは完全に可能です。
Asad Saeeduddin 2013年

4
ADO.NETはADOをラップしません。ADO.NETクラスは通常、他のプロバイダー/ドライバーレイヤーを介さずに、データベースまたはデータベースネットワークライブラリと直接通信します。たとえばSystem.Data.SqlClient、マネージコードでTDSプロトコルを処理し、ネイティブコードを使用して、ネットワーク経由のTCP /名前付きパイプ/その他の送信を処理します。独自のマネージプロバイダーを持たないデータベースでは、を使用System.Data.OleDbしてOLE DB System.Data.Odbcをラップしたり、ODBCをラップしたりできますが、これはお勧めできません。
マイクディミック2015

55

ODBC:-リレーショナルデータベースのみ(SQL Server、Oracleなど)

OLE DB:-リレーショナルデータベースと非リレーショナルデータベースの両方。(Oracle、Sql-Server、Excel、生ファイルなど)


4
間違っています。どちらも、ドライバーによっては非リレーショナルストアと通信できます。
アンディデント

1
いいえ、ODBCを使用すると、リレーショナルデータベースだけでなく、フラットなCSVファイルでもクエリを実行できます。
Wernfried Domscheit 2016年

違う!テキストファイルとXML ODBCドライバーもあります。
Scott Chu

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
笑い、みんな2009年か2016年にODBCについて話している...?それは正しかった。
Yousha Aleayoub 2017年

42

ここに私の理解があります(非権威):

ODBCは、ほとんどのソフトウェアベンダーによってサポートされている、技術にとらわれないオープンスタンダードです。OLEDBは、COM時代のテクノロジ固有の MicrosoftのAPIです(COMは.NETより前のコンポーネントであり、相互運用性テクノロジでした)

ある時点で、さまざまなデータソースベンダー(Oracleなど)は、Microsoftデータコンシューマとの互換性を持ち、自社製品用にOLEDBプロバイダーを開発しましたが、OLEDBはほとんどの場合、Microsoftのみの標準です。現在、ほとんどのMicrosoftデータソースは、主にレガシーODBCデータコンシューマとの互換性のために、ODBCアクセスとOLEDBアクセスの両方を許可しています。また、必要に応じてOLEDBを使用してODBCデータソースにアクセスできるようにするODBCのOLEDBプロバイダー(ラッパー)も存在します。

機能に関しては、OLEDBはODBCよりもはるかに豊富ですが、1つのリングからすべてのルールへのシンドローム(過度に一般的、複雑すぎ、意見がない)に悩まされています。

マイクロソフト以外の世界では、ODBCベースのデータプロバイダーとクライアントが広く使用されており、どこにも行きません。

Microsoftバブルの内部では、OLEDBは段階的に廃止され、そのデータソースのネイティブトランスポート層(MS SQL ServerのTDSなど)の上にネイティブ.NET APIが構築されています。


20

ODBCとOLE DBは、2つの競合するデータアクセステクノロジです。特にSQL Serverに関しては、Microsoftは両方を推奨される将来の方向性として宣伝しましたが、時期は異なります。

ODBC

ODBCは、テーブルのようなデータにアクセスするための業界全体の標準インターフェースです。主にデータベース用に開発され、レコードのコレクションにデータを表示します。各レコードはフィールドのコレクションにグループ化されています。各フィールドには、含まれるデータのタイプに適した独自のデータタイプがあります。各データベースベンダー(Microsoft、Oracle、Postgresなど)は、データベース用のODBCドライバーを提供しています。

データベーステーブルではありませんが、同じ方法でデータにアクセスすることが有用であるように十分に似ているオブジェクトのODBCドライバーもあります。例としては、スプレッドシート、CSVファイル、および縦列レポートがあります。

OLE DB

OLE DBは、データにアクセスするためのMicrosoftのテクノロジーです。ODBCとは異なり、電子メールメッセージ、Webページ、Word文書、ファイルディレクトリなど、テーブル形式と非テーブル形式の両方のデータが含まれます。ただし、オブジェクト指向ではなくプロシージャ指向であり、データソースへのアクセスを開発するためのかなり難しいインターフェイスと見なされています。これを克服するために、ADOはOLE DBの上にあるオブジェクト指向のレイヤーになるように設計されており、ADOを操作するためのよりシンプルで高レベルの(ただし非常に強力ですが)方法を提供します。ADOの大きな利点は、それを使用して、すべてのデータソースの種類に適用されるプロパティにアクセスするのと同じくらい簡単に、特定の種類のデータソースに固有のプロパティを操作できることです。あなたはいくつかの不十分な最低共通分母に制限されていません。

すべてのデータベースにはODBCドライバーがありますが、すべてにOLE DBドライバーがあるわけではありません。ただし、OLE DBのような方法でアクセスしたい場合に使用できるOLEとODBCの間に使用可能なインターフェースがあります。このインターフェイスはMSDASQL(ODBC用のMicrosoft OLE DBプロバイダー)と呼ばれます。

SQL Serverデータアクセステクノロジ

SQL Serverは、(1)は、Microsoftによって作られた、および(2)であるので、マイクロソフトのデータベースプラットフォームを、ODBCおよびOLE DBの両方がそれのために自然にフィットしています。

ODBC

他のすべてのデータベースプラットフォームにはODBCインターフェイスがあったため、Microsoftは明らかにSQL Server用に1つ提供する必要がありました。これに加えて、Microsoft Accessの元のデフォルトテクノロジーであるDAOは、すべての外部データソースと通信する標準的な方法としてODBCを使用します。これにより、ODBCインターフェースが正弦波になりました。SQL Server 2000と共にリリースされたSQL Serverのバージョン6 ODBCドライバーはまだ存在しています。以降のリリースで登場した新しいデータタイプ、接続テクノロジー、暗号化、HA / DRなどを処理するために、更新されたバージョンがリリースされました。2018年7月9日の最新リリースは、2018年3月23日にリリースされたv13.1「SQL Server用のODBCドライバー」です。

OLE DB

これは、マイクロソフト独自のテクノロジであり、2002年から2005年頃にかけて、ADOレイヤーとともに強力に宣伝されました。彼らはそれが選択のデータアクセス技術になることを明らかに望んでいた。(彼らはADOをAccess 2002/2003のデータにアクセスするためのデフォルトの方法にさえしました。)しかし、これは以下のようないくつかの理由で発生しないことが最終的に明らかになりました。

  1. 世界はマイクロソフトテクノロジーに移行するつもりはなく、ODBCから離れていません。
  2. DAO / ODBCはADO / OLE DBよりも高速であり、MS Accessにも完全に統合されていたため、自然死には至りませんでした。
  3. Microsoftが開発している新技術、特にADO.NETは、ODBCと直接通信することもできます。ADO.NETはOLE DBと直接通信することもできます(したがって、ADOをバックウォーターに置きます)が、ADOとは異なり、それだけに依存していませんでした。

これらの理由やその他の理由により、Microsoftは実際にOLE DBを v11以降のSQL Serverリリース(SQL Server 2012)のデータアクセステクノロジーとして非推奨にしました。この時点までの数年間は、ODBCとOLE DBの両方のテクノロジをサポートするSQL Server Native Clientを作成および更新していました。ただし、2012年後半に、SQL ServerのネイティブリレーショナルデータアクセスのためにODBCと連携することを発表し、他のすべての人にも同じことを行うように勧めました。彼らはさらに、v11 / SQL Server 2012以降のSQL ServerリリースはOLE DBを積極的にサポートしないと述べました!

この発表は抗議の嵐を巻き起こした。なぜMSは、何年もかけてコミットするよう求めてきたテクノロジーを突然廃止したのか理解に困惑しました。さらに、SQL Serverに密接にリンクされたMSで作成されたアプリケーションであるSSAS / SSRSとSSISは、完全にまたは部分的にOLE DBに依存していました。さらに別の不満は、OLE DBには、ODBCに移植するのは不可能と思われる望ましい機能があったことです。結局、OLE DBには多くの優れた点がありました。

2017年10月、Microsoftは、正式に非推奨のOLE DBを採用しました。彼らは、Native Client 11の既存の機能セットを備え、マルチサブネットフェイルオーバーとTLS 1.2サポートを導入する新しいドライバー(MSOLEDBSQL)の差し迫った到着を発表しました。ドライバーは2018年3月にリリースされました。


@ChieltenBrinke私がいくつかのソースから投稿をまとめました。たとえば、私の投稿を更新して追加したリンクや、特にそれらが引き起こしたコメントなどです。他の情報源は、boboboboによって言及されたADOに関するJason Roffの本、およびLitwin、Getz、およびGunderloy(本物の古いが、本物の古典)によるThe Access 2002 Desktop Developer's Handbookでした。私はマイクロソフトには何のインサイドトラックも持っていないので、方向性のさまざまな変更の背後にある考え方についての私の推測は、もっともらしいですが、完全に私のものです。
marktwo 2018

6

非常に基本的なレベルでは、これらはさまざまなデータソース(データベース)に対する単なるさまざまなAPIです。OLE DBはより新しく、間違いなく優れています。

あなたはウィキペディアで両方についてもっと読むことができます:

  1. OLE DB
  2. ODBC

つまり、ODBCドライバーまたはOLE DBドライバーを使用して同じデータベースに接続できます。それらの場合のデータベースの動作の違いは、あなたの本が参照するものです。


4
多くのIT関連の主題と同様に、事態はほぼ一巡しました。SQL 2012はOLE DBネイティブプロバイダーをサポートする最後のバージョンであり、アプリケーションはODBCに切り替える必要があります。SQL Serverの「昔」のように technet.microsoft.com/en-us/library/hh967418.aspx
Chris Wood

4
「OLE DBはより新しく、間違いなく優れています」これは2008年には当てはまりましたが、2014
Michael David Watson

@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
Robino

5

どちらもデータプロバイダー(コードがデータソースと通信するために使用するAPI)です。1998年に導入されたOledbは、ODBC(1992年に導入された)の代替となるものでした。



3

詳細はよくわかりませんが、OLE DBとODBCは2つのAPIであり、それぞれの実装固有の詳細をすべて扱う必要なく、さまざまなタイプのデータベースに接続できることを理解しています。WikipediaのOLE DBに関する記事によると、OLE DBはODBCの後継であり、データベースソースとしてのスプレッドシートへのアクセスなど、ODBCでは実行できない機能がいくつかあります。


2

MicrosoftのWebサイトでは、ネイティブOLEDBプロバイダーがSQLサーバーに直接適用され、ODBC Provider for ODBCと呼ばれる別のOLEDBプロバイダーが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を発明したときの大きな展望があると思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.