ODBC和OleDB有什么区别?

8

我在这里发现了这个问题:OLEDB v/s ODBC

它为我提供了更多信息,但没有真正回答我正在问的问题,所以我将从那里开始。

我正在使用C#。我会省略关于我如何陷入这个难题的长篇故事,但基本上我正在尝试在ODBC和OleDB之间做出决定。

我们与许多具有极其不同的数据库(一些SQL,一些Oracle,一些我从未听说过并且没有记住名称)的不同客户端合作。

现在,据我所知,ODBC已经老旧,并且是标准。现在OleDB已经出现了...是...不同的吗?但是可以完成相同的事情(它可以与数据库通信)

为什么我想要在它们之间选择一个?ODBC(根据上面的帖子)是跨平台的,这很好,但他对OleDB提供的信息很少。

在我的其他研究中,我在MSDN论坛上发现人们说“如果可以,请使用OleDB,如果必须,请使用ODBC”。自然地,没有给出任何理由,因此我想听听一些理由。

3个回答

16

ODBC是用于访问数据库的C API。它有一个标准,被每个主要的数据库供应商支持,文档非常完善,而且跨平台。OLEDB是一个类似的接口,它使用微软的COM技术而不是C API。这意味着它只能在支持COM的平台上轻松使用。

归根结底,这两个库提供了大致相同的基本功能。实际上,一些OLEDB驱动程序实际上使用ODBC而不是本地数据库库。

因此,如果您是C#开发人员,在Windows上工作,那么OLEDB是两者之间的明显选择。如果您正在使用C(或C++不使用COM),或需要跨平台支持,则ODBC是更好的选择。


2
作为一名C#开发人员,并且因为您将访问许多不同的数据源,您应该选择OLEDB。我从这篇白皮书中复制了以下内容,因为它提供了使用时的一些提示:

OLE DB不能替代ODBC

ODBC技术和第三方市场已经成熟到一种程度,以至于ODBC是访问SQL数据库的理想技术。因此,OLE DB的一个组成部分是一个新的OLE DB驱动程序管理器,使OLE DB消费者能够与ODBC提供程序通信。以下信息可以指导您选择使用哪种技术:

  • 如果您正在从非OLE环境访问标准关系型数据库,则ODBC是最佳选择。
  • 如果您想向非SQL数据公开数据接口,则OLE DB是最佳选择。
  • 如果您在OLE环境中编程,则OLE DB是最佳选择。
  • 如果想要构建可互操作的数据库组件,则只有选择OLE DB。

我认为需要指出的是,第二个要点仅适用于提供OLEDB驱动程序的供应商(或某些非常专业的客户)-大多数客户端软件从不公开这样的接口。而第四个要点只是营销术语。 - anon
1
@McSim:这些要点都与问题无关。问题是关于从C#中使用这些数据库的。OP不会调用ODBC基于C的API,也不会调用OLE DB基于COM的API。你说你选择了OLEDB。那么你是在调用COM API吗? - John Saunders

0

如果你在使用C#进行编程,你不会直接使用其中任何一个。你将以某种形式使用ADO.NET。

确实,你在连接字符串中指定的提供程序可能会变成ODBC提供程序或OleDB提供程序,但这对你的代码并不重要。ADO.NET将从你的视角同时使用这两个API。


有没有任何一位给我点踩的人可以解释一下为什么要这样做? - John Saunders
1
我没有给你点踩,但是我觉得你没有回答问题。外面有很多白痴——我发现最好的办法就是忽略他们。 - anon
那我不明白这个问题。他不是在决定使用哪个API,是吗?我认为他正在尝试决定使用哪些驱动程序以获得最大的灵活性。我从这个问题中没有得到任何暗示表明OP即将开始调用OLEDB COM API。 - John Saunders
1
此外,白痴并不是问题所在。问题出在那些基于正当理由投反对票的聪明人士——然后又不告诉我理由是什么! - John Saunders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接