1. 开发端安装ODP.NET.下载地址:http://www.oracle.com/technetwork/topics/dotnet/downloads/index.html
注:建议下载和服务器版本一致的odp,不然会有很多奇怪的问题.至于使用32位还是64位,我试过没有差异(服务器64位,开发机32位).
2. vs开一个console程序,引用Oracle.DataAccess.dll,至于从gac还是本地路径引用都可以.测试代码如下:
using System; using System.Collections.Generic; using System.Text; using Oracle.DataAccess.Client; //odp类必须 using Oracle.DataAccess.Types; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { string conString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))" + "(CONNECT_DATA=(SID=testdb)));User Id=dba;Password=dbb;"; //写连接串以上2方法连接都可以,也可以放到Web.Config中。 OracleConnection con=new OracleConnection(conString); OracleCommand command =new OracleCommand(); command.Connection = con; command.CommandText = "select * from T_users";//改成自己的表 con.Open(); OracleDataReader dr = command.ExecuteReader(); // C# while (dr.Read()) { Console.WriteLine(dr[0].ToString()); } //Console.WriteLine(returnResult); Console.Read(); } } }
如果能正常访问数据,就证明ok了.
注:
1. 如果报错
未处理的异常: System.IO.FileNotFoundException: 未能加载文件或程序集“Oracle.Dat
aAccess, Version=2.112.1.2, Culture=neutral, PublicKeyToken=89b483f429c47342”或
它的某一个依赖项。系统找不到指定的文件。
解决:说明gac或者Oracle.DataAccess引用路径异常,建议把文件copy到发布的bin目录.
2. 如果报错
未处理的异常: System.TypeInitializationException: “Oracle.DataAccess.Client.Or
acleConnection”的类型初始值设定项引发异常。 ---> Oracle.DataAccess.Client.Oracl
eException The provider is not compatible with the version of Oracle client
在 Oracle.DataAccess.Client.OracleInit.Initialize()
在 Oracle.DataAccess.Client.OracleConnection..cctor()
--- 内部异常堆栈跟踪的结尾 ---
在 Oracle.DataAccess.Client.OracleConnection..ctor(String connectionString)
在 ConsoleApplication2.Program.Main(String[] args)
解决:这说明oracle依赖的dll环境加载不正确,开发端可能安装的odp版本和服务器不一致.或者客户端缺少oracle运行的动态库.开发端建议重新安装一致版本或者重新进行oracle.dataaccess的gac配置.
3. 客户端
客户端如果不想安装odp.net,则必须在成功连接服务器的开发端的odp安装路径中复制出以下文件放到发布应用程序运行目录.
至于oracle.dataaccess.dll是否注册到客户端的gac,我测试过,都可以.
文件清单:
oci.dll
ociw32.dll
orannzsbb11.dll
oraocci11.dll
oraociei11.dll
bin\OraOps11w.dll
odp.net\x\Oracle.DataAccess.dll(x表示省略路径)
enjoy!