ODBC和ADO.NET之间有什么区别

时间:2015-12-31 11:45:20

标签: oracle ado.net odbc

我正在安装一个新模块,该模块将通过.net 4.5.1连接到Oracle DB。

  1. 我应该使用ODBC还是ADO.NET,它们之间有什么区别?

  2. 我读到ADO.NET需要额外安装Oracle的客户端。有没有办法在不安装附加模块的情况下使用API​​?

2 个答案:

答案 0 :(得分:6)

ODBC是一个通用的,与数据库无关的API,用于基于C / C + / C++ / ObjectiveC的DBMS连接,通过DBMS特定的ODBC驱动程序,转换为特定于DBMS的API和/或DBMS特定的客户端层。

C/C+/C++-based tool
-> ODBC driver 
   -> DBMS libraries
      -> DBMS

ADO.NET是一个通用的,与数据库无关的API,用于基于C#的DBMS连接,通过DBMS特定的ADO.NET提供程序转换为DBMS特定的API和/或DBMS特定的客户层。

C#-based tool
-> ADO.NET Provider
   -> DBMS libraries
      -> DBMS

JDBCOLE DB是类似的通用的,与数据库无关的API,分别用于基于Java和Visual Basic的DBMS连接。)

数据库供应商经常提供"复选框" (意思是,"是的,我们有#34;)ODBC驱动程序和ADO.NET提供程序,以及JDBC驱动程序和/或OLE DB提供程序,它们不一定是性能最佳的也没有最全面的选择。

My employer生成portfolio of high-performance drivers and providers, supporting a wide range of DBMS;鼓励使用免费的两周评估许可进行比较测试。 "单层"选项通常要求在同一主机上存在DBMS客​​户端; "多级" options通常会在数据使用主机上删除此要求。

基于C#的工具无法直接连接到ODBC驱动程序,但是他们可以使用 ADO.NET Provider for ODBC Data Sources 来桥接这些API。 ODBC与ADO.NET没有固有的速度优势,但由于额外的API转换层,这种桥接解决方案存在一些速度损失。

C#-based tool
-> ADO.NET Provider
   -> ODBC driver 
      -> DBMS libraries
         -> DBMS

(当您选择ODBC数据源作为C#编程项目的目标时,Microsoft的编程工具会无形地自动使用Windows内置的ADO.NET到ODBC桥接器。我的雇主也是生产这样的桥梁供应商,在许多情况下都能提供更好的服务。)

答案 1 :(得分:2)

ODBC是一种通用提供程序,ODBC驱动程序几乎可用于任何数据源 - 甚至是简单的CSV文件。

作为一个缺点,你的功能比ADO.NET少,并且(至少在理论上)性能较差。

ADO.NET更严格地连接到关系数据库。请注意,Microsoft的Oracle提供程序为deprecated,您不应将其用于新项目。

为了完整起见,还有一个名为OLE DB的第三个提供程序(请参阅命名空间System.Data.OleDb)。 Microsoft OLE DB Provider for Oracle(msdaora)也是deprecated。来自Oracle OraOLEDB.Oracle的提供商仍然完全支持。

对于与Oracle的最新连接,您应该使用“Oracle Data Provider for .NET”(ODP.NET),您可以从此处下载:64-bit Oracle Data Access Components (ODAC) Downloads

所有ODBC,OLE DB和ODP.NET都需要安装Oracle客户端。绕过它的唯一方法是使用“ODP.NET托管驱动程序”。您也可以从上面的相同位置下载它。