Oracle: ORA-01461 僅可以為插入 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>
<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

浙公網安備 33010602011771號