一、概述
Oracle Data Provider for .NET, Managed Driver:
Oracle官方的托管數據庫訪問組件,單DLL,Oracle.ManagedDataAccess.dll,不安裝Oracle客戶端,不區分32/64位, 直接引用即可。
與非托管程序為Oracle.DataAccess.dll相比,BulkCopy和CustomType之類的都是不支持的:
1、下載地址
官方下載地址:
http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html (當前下版本為64-bit ODAC 12.2c Release 1 (12.2.0.1.0))
nuget:
https://www.nuget.org/packages/Oracle.ManagedDataAccess/ (當前下版本為19.7.0)
https://www.nuget.org/packages/Oracle.ManagedDataAccess.EntityFramework/ (當前下版本為19.7.0)
下載好后 從這個目錄下 odp.net\managed\common拿出最關鍵的兩個dll
Oracle.ManagedDataAccess.dll 和 Oracle.ManagedDataAccess.EntityFramework.dll 。
也可以在項目Nuget中直接安裝這兩個包。
注意:如果需要Entity Framework 設計時特性和其他如TableAdapter向導Visual Studio設計器,可以從https://otn.oracle.com/dotnet下載32位的“Oracle Developer Tools for Visual Studio” 。
此NuGet下載不支持設計時工具;它只提供運行時支持。這個版本的ODP.NET支持Oracle數據庫版本11.2或更高版本。
二、配置文件定義數據源
1、無配置文件情況,直接連接DB
無SQL*Net配置文件tnsnames.ora,直接在C#程序中寫連接字符串
string conString = "User Id=hr; password=hr;Data Source=localhost:1521/orcl; Pooling=false;";
2、使用配置文件方式:
1、使用 tnsnames.ora文件,此文件需放置在應用程序同目錄:
tnsnames.ora內容:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
2、使用app.config或\web.config配置文件定義別名(無tnsnames.ora文件)
<oracle.manageddataaccess.client> <version number="*"> <dataSources> <dataSource alias="orcl" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME = orcl)))"/> </dataSources> </version> </oracle.manageddataaccess.client>
3、使用 TNS_ADMIN目錄:
<oracle.manageddataaccess.client> <version number="*"> <settings> <setting name="TNS_ADMIN" value="C:\app\oracle\product\12.1.0\client_1\Network\Admin\"/> </settings> </version> </oracle.manageddataaccess.client>
3、完整的app/web.config 文件:
<configuration> <configSections> <section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342"/> </configSections> <system.data> <DbProviderFactories> <remove invariant="Oracle.ManagedDataAccess.Client"/> <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342"/> </DbProviderFactories> </system.data> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <publisherPolicy apply="no"/> <assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral"/> <bindingRedirect oldVersion="4.121.0.0 - 4.65535.65535.65535" newVersion="4.122.19.1"/> </dependentAssembly> </assemblyBinding> </runtime> <oracle.manageddataaccess.client> <version number="*"> <dataSources> <dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) "/> </dataSources> </version> </oracle.manageddataaccess.client> </configuration>
三、使用
string conString = "User Id=hr; password=hr; Data Source=orcl;Pooling=false; "; OracleConnection con = new OracleConnection(); con.ConnectionString = conString; con.Open(); OracleCommand cmd = con.CreateCommand(); cmd.CommandText = "select first_name from employees where department_id = 60"; OracleDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { string conString = "User Id=hr; password=hr; Data Source=orcl;Pooling=false; "; OracleConnection con = new OracleConnection(); con.ConnectionString = conString; con.Open(); OracleCommand cmd = con.CreateCommand(); cmd.CommandText = "select first_name from employees where department_id = 60"; OracleDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { Console.WriteLine("Employee Name: " + reader.GetString(0)); } Console.WriteLine("Employee Name: " + reader.GetString(0)); }