不推荐System.Data.OracleClient,推荐Oracle.DataAccess即:安装使用ODP.Net 问题及说明

分类:数据库| 发布:llmaomi| 查看: | 发表时间:2015/4/4

最近使用VS2010时发现System.Data.OracleClient不再受微软支持,而是推荐使用Oracle自己的ODP.Net,于是就踏上了纠结的安装ODP.net的道路

   首先我到oracle的官网注册了账号并下载了ODTwithODAC112021这个版本(http://www.oracle.com/technetwork/database/windows/downloads/index-101290.html),这也成为我纠结的开始.因为网上介绍基本都是基于ODTwithODAC1110720这个版本(http://blog.ywxyn.com/index.php/archives/326),里面提到的一些解压的dll在ODTwithODAC112021相应路径有时找不到对应的dll,所以就很郁闷.本来不准备安装ODTwithODAC112021的(只准备解压获取dll),结果最后还是不得不安装.

    安装后找到了部分dll,如Oracle.DataAccess.dll,oci.dll,ociw32.dll,orannzsbb11,oraocci11.dll 但是死活找不到介绍文章中的oraociicus11.dll 和OraOps11w.dll 两个dll,一度打算卸载ODTwithODAC112021这个版本转而安装ODTwithODAC1110720这个版本,最后将ODTwithODAC112021删除后不小心在

D:\app\Administrator\product\11.2.0\client_1\bin找到了OraOps11w.dll这个dll(隐藏的太深),然后通过这篇文章(http://camnpr.com/database/1966.html)中的oraociei11.dll (也可以用更小的oraociicus11.dll代替) 也算曲线找到了oraociicus11.dll,用oraociei11.dll(D:\app\Administrator\product\11.2.0\client_1)代替,这个dll有100多M.

    结果最后把Oracle.DataAccess.dll引入,并将其它六个dll放在bin目录下还调试成功了,真是苦尽甘来,可喜可贺!

ORCL:数据库名称

system:登录名

password:密码

HOST=127.0.0.1,目前只知道用127.0.0.1

PORT=1521:端口也只知道用1521

        string connstring = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))                (CONNECT_DATA=(SID=ORCL)));User Id=system;Password=sa;";            using (OracleConnection conn = new OracleConnection(connstring))            {                conn.Open();                string sql = "SELECT * FROM cj_demo_crud cdc";                  OracleDataAdapter oa = new OracleDataAdapter(sql, conn);                DataTable dt = new DataTable();                oa.Fill(dt);            }

总结:

一. 还是System.Data.OracleClient配置方便,只要引入就行,ODP.NET还要下载,安装,提取dll,很是麻烦

二.安装ODTwithODAC会导致pl/sql登录不上(ora-12154),卸载后即可(原因不明)

三、oci.dll、ociw32.dll、orannzsbb11.dll、oraocci11.dll、oraociei11.dll、OraOps11w.dll还是必须加到bin目录下,目前遇到的问题

     1、绑定变量时报错,无法解析参数(上述六个dll必须放在项目的bin目录下,而不是类库,类库只用引用Oracle.DataAccess.dll即可,假设类库的名称为Demo.ODPNet,

        那么项目中还除了引用Demo.ODPNet外,还必须引用Oracle.DataAccess.dll,否则会报错:类型初始值异常

四、关于command.BindByName = true;

      默认情况下ODP.Net 绑定变量时,sql语句中的变量顺序必须和变量绑定顺序一致,否则Fill查不到数据,cmd.ExecuteNonQuery()返回0无法执行,

     将BindByName 设为true后,sql变量顺序和绑定顺序即可不一致(以下代码不设置BindByName 则查不出数据)

   DBHelper dbHelper = new DBHelper();             string sqlstr = "SELECT cc.*,ROWID FROM cde_city cc WHERE cc.provinceid=:provinceid AND cc.cityid=:cityid";             ParamsHelper parHepler = new ParamsHelper();             parHepler.Add(":cityid", "002");             parHepler.Add(":provinceid", "01");              DataTable dt = dbHelper.GetDataTable(sqlstr, parHepler.ListParameter);


365据说看到好文章不转的人,服务器容易宕机
原创文章如转载,请注明:转载自郑州网建-前端开发 http://camnpr.com/
本文链接:http://camnpr.com/database/1967.html