安装使用ODP.Net 问题及说明

   最近使用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://www.examw.com/oracle/jishu/135433/)中的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);


 

 

posted @ 2011-11-27 19:49    阅读(19241)  评论(5编辑  收藏  举报