Oracle
 sql >> база данни >  >> RDS >> Oracle

Дългите низове в N-Hibernate с Oracle причиняват грешка

Това е известен проблем с предоставения от .NET System.Data.OracleClient.OracleConnection шофьор. Поправката е или да използвате предоставения от Oracle ODP.net клиент Oracle.DataAccess.Client.OracleConnection (вижте:http://nuget.org/packages/odp.net.x86/) или използвайте следното решение (препратка от:http://thebasilet.blogspot.be/2009/07/nhibernate-oracle-clobs.html ).

public class CustomOracleDriver : OracleClientDriver
{
    protected override void InitializeParameter(System.Data.IDbDataParameter dbParam, string name, SqlType sqlType)
    {
        base.InitializeParameter(dbParam, name, sqlType);


        // System.Data.OracleClient.dll driver generates an ORA-01461 exception because 
        // the driver mistakenly infers the column type of the string being saved, and 
        // tries forcing the server to update a LONG value into a CLOB/NCLOB column type. 
        // The reason for the incorrect behavior is even more obscure and only happens 
        // when all the following conditions are met.
        //   1.) IDbDataParameter.Value = (string whose length: 4000 > length > 2000 )
        //   2.) IDbDataParameter.DbType = DbType.String
        //   3.) DB Column is of type NCLOB/CLOB

        // The above is the default behavior for NHibernate.OracleClientDriver
        // So we use the built-in StringClobSqlType to tell the driver to use the NClob Oracle type
        // This will work for both NCLOB/CLOBs without issues.
        // Mapping file must be updated to use StringClob as the property type
        // See: http://thebasilet.blogspot.be/2009/07/nhibernate-oracle-clobs.html
        if ((sqlType is StringClobSqlType))
        {
            ((OracleParameter)dbParam).OracleType = OracleType.NClob;
        }
    }
}

Трябва да актуализирате своя SessionFactory за да използвате този драйвер, както и да актуализирате някое от вашите clob съпоставяния, за да използвате StringClob персонализиран тип

Map(x => x.EventType).CustomSqlType("Clob").CustomType("StringClob");



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORACLE След задействане на актуализацията:разрешаване на грешка при мутиращата таблица на ORA-04091

  2. LN() Функция в Oracle

  3. Функция ASCIISTR() в Oracle

  4. Декларация на Oracle, обяснена със съвети и примери

  5. Каква е разликата между AS и IS в съхранена процедура на Oracle?