sql >> データベース >  >> RDS >> Oracle

N-HibernatewithOracleの長い文字列はエラーを引き起こします

    これは、.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を更新する必要があります このドライバーを使用し、StringClobを使用するように任意のCLOBマッピングを更新します カスタムタイプ

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



    1. 初心者向けSQLMAX()

    2. MariaDBでデータベース照合を取得する4つの方法

    3. 時系列データベースの概要

    4. 複数のパラメーター化された変数をC#のデータベースに追加する