李晓亮的博客

导航

【转】net 2.0 访问Oracle --与Sql Server的差异,注意事项,常见异常(4)

转自:http://blog.sina.com.cn/s/blog_4bda1bf3010007pn.html

常见错误:

         1、“调用 '存储过程名称' 时参数个数或类型错误”
  
          出现错误的原因是因为你的 创建OracleParameter 是使用的参数名称与存储过程或Sql语句中定义的参数名称不一致。另外,也要注意,虽然在Sql 语句中使用冒号“:”代表参数,但在创建OracleParameter时,指定的参数名称不能使用冒号,在new OracleParameter时,ParameterName只能使用参数的字符部分。

         2、“存储过程名称' 不是过程或尚未定义”

        OracleCommand的Parameters集合中的参数个数与存储过程中定义的数量不一致,你可能漏了某个Parameter没有创建

         3、"ORA-01036: 非法的变量名/编号“
 
       出现此错误的原因很可能是存储过程的包体的参数定义与包头的定义不一样,很多时候修改了包体,却忘了修改包头。另外,创建OracleParameter时,由于构造函数的版本众多,使用了某些版本时,可能会出现这个错误,建议创建OracleParameter时,一定要指定OracleType。 
        直接使用Sql 语句时,在Sql 语句中的参数部分没有使用冒号作为前缀,或者错误使用了Sql Server 的"@"符号都会导致此错误。

       总之此错误出现在Parameter指定的ParameterName,与实际参数名称不匹配时。
 
      要注意:在 new OracleParameter() 中,指定的ParameterName 只需要包含参数的字符部分,无需保含前缀,如:冒号。


      4、System.Data.OracleClient requires Oracle client software version 8.1.7 or greater. 

      出现这个错误表示你需要安装Oracle客户端。假如你已经安装了Oracle客户端,还出现这个错误,那肯定由于权限的问题,博客园的朋友Jeet 给出了答案:http://www.cnblogs.com/jeet/archive/2005/06/24/115150.html,具体方法如下:
    
         1、以管理员的用户登录;
         2、找到ORACLE_HOME文件夹(比如C:\oracle\ora92),点右键,选属性--安全,在组或用户栏中选“Authenticated Users”,在下面权限列表中把“读取和运行”的权限去掉,再按应用;重新选上“读取和运行”权限,点击应用;选权限框下面的“高级”按钮,确认“Authenticated Users”后面的应用于是“该文件夹、子文件夹及文件”,按确定把权限的更改应用于该文件夹; 
   
     我在第一次使用Oracle是,碰到这个问题,使用jeet的方案解决了,Jeet说一定要重新启动系统,但我没有重启也可以。或许是操作系统版本的问题,我的是windows 2003

      总结:
     Oracle与Sql Server的访问上有很大不同:

         1、字段类型不同
         2、存储过程有很大差异,Oracle不能直接返回记录集,需要通过一个 out 参数达到目的。在OracleType中有一个OracleType.Cursor 类型与之对应。 Oracle中的存储过程大部分都定义成Funcion,  有返回值。   在定义Command的参数集合时,需要增加一个"ReturnValue"的参数。
        3、Oracle中的参数无需"@"符号
        4、Oracle的Sql 语句中 在参数前面加冒号":", 而Sql Server 的Sql 在前面加"@"            

--Sql Server的Sql 语句
insert into Table (Column1,Column2) values (@Value1,@Value2


--Oracel中的Sql 语句
 Insert Into Table (Column1,Column2) values
(:Value1,:Value2)

posted on 2011-08-04 21:27  LeeXiaoLiang  阅读(186)  评论(0)    收藏  举报