我正在安装一个新模块,该模块将通过.net 4.5.1连接到Oracle DB。
我应该使用ODBC还是ADO.NET,它们之间有什么区别?
我读到ADO.NET需要额外安装Oracle的客户端。有没有办法在不安装附加模块的情况下使用API?
答案 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
(JDBC和OLE 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托管驱动程序”。您也可以从上面的相同位置下载它。