一.System.Data.OracleClient 微软提供的连接库,不过已经过时,不建议使用
二.Oracle.DataAccess.Client (ODP.Net) Oracle提供的数据库访问类库.
三.Oracle.ManagedDataAccess.dll (ODP.NET Managed) 也是Oracle提供的。
推荐使用方案3,但是使用ManagedDataAccess的话,必须添加对程序集“netstandard”的引用,而这个程序集又是FrameWork 4.6及以上才有的,
所以笔者这用的.net框架FrameWork 4.5的项目并不能使用, 采用方案二来处理,方案二是需要区分x86/x64版本的.
1.去官网下载需要的dll文件。
http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html
下载对应的vs版本的dll文件,如果vs版本太低,就下载最老的dll文件,笔者下载的最老的: ODAC 11.2 Release 5
在下载的ODTwithODAC1120320_32bit文件夹下找到所需的dll文件(jar压缩包用解压工具解压):
文件 | 路径 | 备注 |
oci.dll | ~stageComponentsoracle.rdbms.rsf.ic11.2.0.3.01DataFilesfilegroup2.jar | 原文件叫oci.dll.dbl,把后面的扩展名去掉 |
ociw32.dll | ~stageComponentsoracle.rdbms.rsf.ic11.2.0.3.01DataFilesfilegroup2.jar | 原文件叫ociw32.dll.dbl,把后面的扩展名去掉 |
Oracle.DataAccess.dll | ~stageComponentsoracle.ntoledb.odp_net_211.2.0.3.01DataFilesfilegroup2.jar | |
orannzsbb11.dll | ~stageComponentsoracle.rdbms.rsf.ic11.2.0.3.01DataFilesfilegroup1.jar | |
oraocci11.dll | ~stageComponentsoracle.rdbms.rsf.ic11.2.0.3.01DataFilesfilegroup3.jar | |
oraociei11.dll | ~stageComponentsoracle.rdbms.ic11.2.0.3.01DataFilesfilegroup3.jar | |
oraociicus11.dll | ~stageComponentsoracle.rdbms.ic11.2.0.3.01DataFilesfilegroup4.jar | |
OraOps11w.dll | ~stageComponentsoracle.ntoledb.odp_net_211.2.0.3.01DataFilesfilegroup16.jar |
将这些dll文件放到项目运行的bin目录下,和运行文件同一目录。
文件不齐全,引发错误:The provider is not compatible with the version of Oracle client
缺少oraociei11.dll ,引发错误:ORA-12737: Instant Client Light: unsupported server character set %s
项目中添加Oracle.DataAccess.dll的引用
数据库连接语句:
<connectionStrings> <add name="OracleConnString" connectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.161)(PORT=1521))(CONNECT_DATA=(SID=MyOracle)));Persist Security Info=True;User ID=system;Password=Sky312;"/> </connectionStrings>
C#调用:using Oracle.DataAccess.Client;
private readonly string connstr = ConfigurationManager.ConnectionStrings["OracleConnString"].ConnectionString; string sql = "SELECT * FROM "UserInfo" "; OracleConnection connection = new OracleConnection(connstr); connection.Open(); OracleCommand command = new OracleCommand(sql, connection); DataTable table = null; try { OracleDataAdapter adapter = new OracleDataAdapter(); adapter.SelectCommand = command; table = new DataTable(); adapter.Fill(table); } catch { throw; } finally { command.Dispose(); connection.Close(); connection.Dispose(); }
dataGridView1.DataSource = table;
查询