qual é a diferença entre as fontes de dados OLE DB e ODBC?

171

Eu estava lendo um artigo de ajuda do MS Excel sobre pivotcache e me pergunto o que eles significam por fontes OLE DB e ODBC

... Você deve usar a propriedade CommandText em vez da propriedade SQL, que agora existe principalmente para compatibilidade com versões anteriores do Microsoft Excel. Se você usar as duas propriedades, o valor da propriedade CommandText terá precedência.

Para fontes OLE DB , a propriedade CommandType descreve o valor da propriedade CommandText.

Para origens ODBC , a propriedade CommandText funciona exatamente como a propriedade SQL e a configuração da propriedade faz com que os dados sejam atualizados ...

Eu realmente aprecio suas respostas curtas.

Martin08
fonte
2
Apenas uma observação, de acordo com este livro Implementando um Data Warehouse com Microsoft SQL Server 2012 : "A Microsoft anunciou que em algum momento no futuro próximo, o suporte para conexões OLE DB será removido em favor de conexões ODBC".
B. Burgdorf
2
Desde 6 de outubro de 2017, não é preterido. Consulte blogs.msdn.microsoft.com/sqlnativeclient/2017/10/06/…
Bogey Jammer

Respostas:

147

De acordo com o ADO: ActiveX Data Objects , um livro de Jason T. Roff, publicado pela O'Reilly Media em 2001 (excelente diagrama aqui), ele diz exatamente o que MOZILLA disse.

(diretamente da página 7 desse livro)

  • ODBC fornece acesso apenas a bancos de dados relacionais
  • OLE DB fornece os seguintes recursos
    • Acesso aos dados, independentemente de seu formato ou localização
    • Acesso total a fontes de dados ODBC e drivers ODBC

Portanto, parece que o OLE DB interage com fontes de dados baseadas em SQL através da camada de driver ODBC.

texto alternativo

Não tenho 100% de certeza de que esta imagem esteja correta. As duas conexões das quais não tenho certeza são: ADO.NET através do ADO C-api e OLE DB através do ODBC para fonte de dados baseada em SQL (porque neste diagrama o autor não coloca o acesso do OLE DB através do ODBC, que acredito É um erro).

bobobobo
fonte
7
Se o OLE DB usar o ODBC para conectar-se às fontes de dados SQL, qualquer fonte de dados SQL suportada pelo OLE DB precisará ser suportada pelo ODBC; no entanto, esse não é o caso - o diagrama original deve estar correto (e não este )
Danny Varod
8
Na verdade, às vezes, o OLE DB envolve o driver ODBC, às vezes não. Veja aqui
bobobobo 11/12
3
Esta entrada jamesmccaffrey.wordpress.com/2006/05/02/odbc-vs-ole-db diz que, para o SQL DS, o OLEDB passa pelo ODBC.
Hernán
1
@DannyVarod Ah, não importa. Eu perdi o qualificador crítico em "qualquer fonte de dados SQL suportada pelo OLE DB ...". Eu estava falando sobre o fato de que, como o OLE DB suporta fontes de dados não RDBMS, é totalmente possível que o conjunto não filtrado de fontes de dados suportadas pelo OLE DB seja um superconjunto das suportadas pelo ODBC.
Asad Saeeduddin
4
O ADO.NET não quebra o ADO. As classes ADO.NET geralmente falam diretamente com o banco de dados ou a biblioteca de rede de banco de dados, não por meio de qualquer outra camada de provedor / driver. Por exemplo, System.Data.SqlClientlida com o protocolo TDS no código gerenciado, usando apenas o código nativo para lidar com a transmissão TCP / Named Pipes / etc pela rede. Para bancos de dados que não possuem um provedor gerenciado próprio, você pode usar System.Data.OleDbpara quebrar o OLE DB ou o System.Data.OdbcODBC, mas isso não é recomendado.
Mike Dimmick
55

ODBC: - Somente para bancos de dados relacionais (Sql Server, Oracle etc)

OLE DB: - Para bancos de dados relacionais e não relacionais. (Oracle, Sql-Server, Excel, arquivos brutos, etc.)

MOZILLA
fonte
4
Errado, ambos podem conversar com lojas não relacionais, dependendo dos drivers.
Andy Dent
1
Não, com o ODBC, você pode consultar até arquivos CSV simples, não apenas bancos de dados relacionais.
Wernfried Domscheit 9/03/16
Errado! Também há arquivo de texto e driver ODBC XML.
Scott Chu
1
Eu acho que isso não é correto ... 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, vocês estão falando sobre ODBC em 2009 ou 2016 ...? estava correto.
Yousha Aleayoub
42

Aqui está o meu entendimento (não autoritativo):

ODBC é um padrão aberto independente de tecnologia suportado pela maioria dos fornecedores de software. OLEDB é uma API da Microsoft específica da tecnologia da era COM (a COM era uma tecnologia de componente e interoperabilidade antes do .NET)

Em algum momento, vários fornecedores de fontes de dados (por exemplo, Oracle etc.), dispostos a serem compatíveis com os consumidores de dados da Microsoft, desenvolveram fornecedores OLEDB para seus produtos, mas, na maioria das vezes, o OLEDB continua sendo um padrão exclusivo da Microsoft. Agora, a maioria das fontes de dados da Microsoft permite acesso ODBC e OLEDB, principalmente para compatibilidade com consumidores de dados ODBC herdados. Além disso, existe um provedor OLEDB (wrapper) para ODBC, que permite usar o OLEDB para acessar fontes de dados ODBC, se assim o desejar.

Em termos de recursos, o OLEDB é substancialmente mais rico que o ODBC, mas sofre da síndrome de um anel para governar todos (excessivamente genérica, complicada demais, sem opinião).

No mundo não pertencente à Microsoft, fornecedores e clientes de dados ODBC são amplamente utilizados e não vão a lugar algum.

Dentro da bolha da Microsoft, o OLEDB está sendo desativado em favor das APIs nativas do .NET construídas sobre qualquer camada de transporte nativa para essa fonte de dados (por exemplo, TDS para MS SQL Server).

zvolkov
fonte
20

ODBC e OLE DB são duas tecnologias concorrentes de acesso a dados. Especificamente em relação ao SQL Server, a Microsoft promoveu os dois como sua Direção preferida do futuro - embora em momentos diferentes.

ODBC

ODBC é uma interface padrão de todo o setor para acessar dados semelhantes a tabelas. Foi desenvolvido principalmente para bancos de dados e apresenta dados em coleções de registros, cada um dos quais agrupado em uma coleção de campos. Cada campo possui seu próprio tipo de dados adequado ao tipo de dados que contém. Cada fornecedor de banco de dados (Microsoft, Oracle, Postgres,…) fornece um driver ODBC para seu banco de dados.

Também existem drivers ODBC para objetos que, embora não sejam tabelas de banco de dados, são suficientemente semelhantes para acessar dados da mesma maneira. Exemplos são planilhas, arquivos CSV e relatórios em colunas.

OLE DB

OLE DB é uma tecnologia da Microsoft para acesso a dados. Ao contrário do ODBC, ele abrange dados semelhantes a tabelas e não semelhantes a tabelas, como mensagens de email, páginas da Web, documentos do Word e diretórios de arquivos. No entanto, é orientado a procedimentos e não a objetos e é considerado uma interface bastante difícil para desenvolver o acesso às fontes de dados. Para superar isso, o ADO foi projetado para ser uma camada orientada a objetos no topo do OLE DB e fornecer uma maneira mais simples e de nível superior - embora ainda muito poderosa - de trabalhar com ele. A grande vantagem do ADO é que você pode usá-lo para manipular propriedades específicas de um determinado tipo de fonte de dados, tão facilmente quanto você pode usá-lo para acessar as propriedades que se aplicam a todos os tipos de fonte de dados. Você não está restrito a um menor denominador comum insatisfatório.

Embora todos os bancos de dados tenham drivers ODBC, nem todos eles possuem drivers OLE DB. No entanto, existe uma interface disponível entre o OLE e o ODBC que pode ser usada se você deseja acessá-los da maneira semelhante ao OLE DB. Essa interface é chamada MSDASQL (provedor Microsoft OLE DB para ODBC).

Tecnologias de acesso a dados do SQL Server

Como o SQL Server é (1) fabricado pela Microsoft e (2) a plataforma de banco de dados da Microsoft, o ODBC e o OLE DB são um ajuste natural para ele.

ODBC

Como todas as outras plataformas de banco de dados tinham interfaces ODBC, a Microsoft obviamente precisava fornecer uma para o SQL Server. Além disso, o DAO, a tecnologia padrão original no Microsoft Access, usa o ODBC como a maneira padrão de conversar com todas as fontes de dados externas. Isso fez da interface ODBC uma condição sine qua non. O driver ODBC da versão 6 para o SQL Server, lançado com o SQL Server 2000, ainda existe. Versões atualizadas foram lançadas para lidar com os novos tipos de dados, tecnologias de conexão, criptografia, HA / DR etc. que apareceram nas versões subseqüentes. Em 07/07/2018, a versão mais recente é a v13.1 “Driver ODBC para SQL Server”, lançada em 23/03/2018.

OLE DB

Essa é a tecnologia da Microsoft, que eles estavam promovendo fortemente entre 2002 e 2005, junto com a camada ADO que a acompanha. Evidentemente, eles esperavam que se tornasse a tecnologia de acesso a dados de sua escolha. (Eles até tornaram o ADO o método padrão para acessar dados no Access 2002/2003.) No entanto, eventualmente ficou claro que isso não aconteceria por vários motivos, como:

  1. O mundo não iria se converter às tecnologias da Microsoft e se afastar do ODBC;
  2. O DAO / ODBC foi mais rápido que o ADO / OLE DB e também foi completamente integrado ao MS Access; portanto, não seria uma morte natural;
  3. Novas tecnologias que estavam sendo desenvolvidas pela Microsoft, especificamente o ADO.NET, também podiam conversar diretamente com o ODBC. O ADO.NET também podia conversar diretamente com o OLE DB (deixando o ADO em segundo plano), mas não era (ao contrário do ADO) apenas dependente dele.

Por esses motivos e outros , a Microsoft realmente descontinuou o OLE DB como uma tecnologia de acesso a dados para versões do SQL Server após a v11 (SQL Server 2012). Por alguns anos antes desse ponto, eles estavam produzindo e atualizando o SQL Server Native Client, que suportava as tecnologias ODBC e OLE DB. No final de 2012, eles anunciaram que estariam alinhados ao ODBC para acessar dados relacionais nativos no SQL Server e incentivaram todos os demais a fazer o mesmo. Eles declararam ainda que as versões do SQL Server após a v11 / SQL Server 2012 não suportariam ativamente o OLE DB!

Este anúncio provocou uma tempestade de protestos. As pessoas não conseguiram entender por que a MS repentinamente deprecia uma tecnologia com a qual haviam passado anos se comprometendo. Além disso, o SSAS / SSRS e o SSIS, que eram aplicativos gravados em MS intimamente vinculados ao SQL Server, dependiam total ou parcialmente do OLE DB. Outra reclamação foi que o OLE DB tinha certos recursos desejáveis ​​que pareciam impossíveis de transportar de volta ao ODBC - afinal, o OLE DB tinha muitos pontos positivos.

Em outubro de 2017, a Microsoft cedeu e oficialmente reprovou o OLE DB . Eles anunciaram a chegada iminente de um novo driver (MSOLEDBSQL) que teria o conjunto de recursos existente do Native Client 11 e também introduziria failover de multi-sub-rede e suporte a TLS 1.2. O driver foi lançado em março de 2018.

marktwo
fonte
@ChieltenBrinke Juntei a publicação de várias fontes, como os links que atualizei para incluir e, principalmente, os comentários que eles provocaram. Outras fontes foram o livro de Jason Roff sobre o ADO mencionado por bobobobo, e o The Access 2002 Desktop Developer's Handbook, de Litwin, Getz e Gunderloy (bem antigo, mas realmente clássico). Eu não tenho nenhum tipo de pista interna na Microsoft, então minhas especulações sobre o pensamento por trás de suas várias mudanças de direção, embora plausíveis, são inteiramente minhas.
Marktwo 21/09/19
6

Em um nível muito básico, essas são apenas APIs diferentes para as diferentes fontes de dados (ou seja, bancos de dados). OLE DB é mais recente e sem dúvida melhor.

Você pode ler mais sobre ambos na Wikipedia:

  1. OLE DB
  2. ODBC

Ou seja, você pode se conectar ao mesmo banco de dados usando um driver ODBC ou driver OLE DB. A diferença no comportamento do banco de dados nesses casos é a que seu livro se refere.

Ilya Kochetov
fonte
4
Tal como acontece com muitos assuntos relacionados à TI, as coisas quase se completaram. O SQL 2012 foi a última versão para oferecer suporte ao provedor nativo do OLE DB e os aplicativos agora devem voltar ao ODBC. como os "velhos tempos" do SQL Server technet.microsoft.com/en-us/library/hh967418.aspx
Chris Wood
4
"OLE DB é mais recente e indiscutivelmente melhor" este pode ter sido verdade em 2008, mas não em 2014.
Michael David Watson
@MichaelDavidWatson Então, o que você diria. Melhor usar ODBC ou OLEDB? Preciso dar suporte ao maior número possível de bancos de dados SQL. E, como indicado, o OLE DB também pode acessar uma fonte de dados ODBC. Então, por que você diria que "OLE DB é mais recente e sem dúvida melhor" ainda está incorreto em 2015? :)
LuckyLikey
O @LuckyLikey MS descontinuou o OLEDB e o SQL Server não o suporta mais (o SS ​​2012 foi o último a apoiá-lo). msdn.microsoft.com/pt-br/library/hh967418.aspx
Robino
5

Ambos são provedores de dados (API que seu código usará para conversar com uma fonte de dados). O OLEDB, introduzido em 1998, deveria substituir o ODBC (introduzido em 1992)

Arcturus
fonte
3

Não tenho certeza de todos os detalhes, mas meu entendimento é que OLE DB e ODBC são duas APIs disponíveis para conexão com vários tipos de bancos de dados sem precisar lidar com todos os detalhes específicos de implementação de cada um. De acordo com o artigo da Wikipedia sobre OLE DB , o OLE DB é o sucessor da Microsoft para ODBC e fornece alguns recursos que talvez você não consiga fazer com ODBC, como acessar planilhas como fontes de banco de dados.

user10340
fonte
2

No site da Microsoft, mostra que o provedor OLEDB nativo é aplicado diretamente ao SQL Server e outro provedor OLEDB chamado OLEDB Provider for ODBC para acessar outro banco de dados, como Sysbase, DB2 etc. Existem diferentes tipos de componentes no OLEDB Provider. Consulte Consultas distribuídas no MSDN para obter mais informações.

FebWind
fonte
0

O ODBC funciona apenas para bancos de dados relacionais, não pode funcionar com bancos de dados não relacionais, como arquivos do Excel. Onde o Olebd pode fazer tudo.

Md Shahriar
fonte
-3

Para saber por que o M $ inventa o OLEDB, você não pode comparar o OLEDB com o ODBC. Em vez disso, você deve comparar o OLEDB com o DAO, RDO ou ADO. Este último depende em grande parte do SQL. No entanto, o OLEDB depende do COM. Mas o ODBC já existe há muitos anos, então há uma ponte OLEDB-ODBC para remediar isso. Eu acho que existe uma grande figura quando o M $ inventa o OLEDB.

Scott Chu
fonte