Oracle: ORA01461 仅可以为插入 LONG 列的 LONG 值赋值(can bind a LONG value only for insert into a LONG )

(以下都为个人总结,非官方解决办法)

ORA-01461解决办法:

      引起原因: 主要为CLOB,BLOB等大字段数据Insert引起.

      我的环境: WCF + NHibernate 2.1.1 + Oracle 10g + OracleClient19g

先在 下载Oracle 10g Release 2 ODAC and Oracle Developer Tools for Visual Studio .NET, 配置好数据库的链接(确保没问题,自带测试程序,可以做测试)

 接下来开始配置我们的WCF Web环境 & NHibernate.cfg.xml

1. 在web.config中加入以下配置

<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<!-- Oracle 11g Config Only one be enable -->
         
<qualifyAssembly partialName="Oracle.DataAccess" fullName="Oracle.DataAccess, Version=2.111.6.20, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
      
</assemblyBinding>

<!-- Oracle 10g Config, Only one be enable -->
         
<qualifyAssembly partialName="Oracle.DataAccess" fullName="Oracle.DataAccess, Version=2.102.2.20, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
      
</assemblyBinding>
</runtime>
</configuration>

2. 在hibernate.cfg.xml中坐如下修改

<property name="connection.driver_class">HNibernate.Driver.OracleDataClientDriver, NHibernate</property>

3. 个人理解

    Oracle.DataAccess应该是Oracle 为.Net 类库提供的一套数据库访问组件,但是否是基于System.Data.OracleClient的,由于时间的关系,没做过多的研究.

配置好之后,插入CLOB字段数据测试成功

备注:

a. Oracle 总客户端程序一定要跟服务端程序做对应, 貌似在Oracle 的产品体系架构中不存在高版本自适应低版本的规则(这一点上微软就不一样了,更人性化,哈哈,我想Oracle 也肯定有他的理由,并不是说Oracle不好哦!)

b. 对于CLOB字段在hibernate映射文件中的类型对应, sql-type="CLOB" type="String"(对应C#类型的映射)

可以草考的其他资料:

http://forums.oracle.com/forums/thread.jspa?threadID=259360&tstart=0

原文地址:https://www.cnblogs.com/feinian/p/1616995.html