2011-01-21 14 views
0

I月が1e250ような値が含まれているC#System.Double性を有する:NHibernate/Oracle:BINARY_DOUBLE列に大きな数値を挿入する方法は?

public virtual double DoubleValue {get; set;} 

プロパティがBINARY_DOUBLE列にマッピングされている:BINARY_DOUBLEため

<property name="DoubleValue" column="VALUE_BINARY_DOUBLE"/> 

最大値は約1.7E + 308です(Oracle doc)が、私は例外を取得しています:
ORA-01426を:数値のオーバーフロー

問題は、SQL +を通じてクエリを実行する場合にも表示されます。 TO_BINARY_DOUBLEキャストを使用して動作させる必要があります。私の理解では、提供された数値は暗黙的にNUMBERに変換されます:1e125(NUMBERの最大値は1e126)でのクエリの処理は1e250では機能しません。

私も成功せず、それらのマッピングを試してみた:

<property name="DoubleValue" column="VALUE_BINARY_DOUBLE" type="System.Double"/> 
<property name="DoubleValue" column="VALUE_BINARY_DOUBLE" type="binary"/> 

を使用します。Oracle 11G - NHibernateは2.1.0 - ユーザーにより提供されたリード用の.NET 3.5 SP1

感謝を!私たちはどんな解決策を見つけることができませんでしたので、ここで

答えて

0

は、我々が使用している回避策です:
は、C#でプロパティを追加します。

public virtual string DatabaseDoubleValue 
{ 
    get 
    { 
     return DoubleValue.ToString(); 
    } 
    set 
    { 
     DoubleValue = double.Parse(value); 
    } 
} 

変更マッピングを

<property name="DatabaseDoubleValue" column="VALUE_BINARY_DOUBLE"/> 

へのトリガーを追加します。 VALUE_BINARY_DOUBLE列:

FOR EACH ROW 
BEGIN 
    :NEW.VALUE_BINARY_DOUBLE := TO_BINARY_DOUBLE(:NEW.VALUE_BINARY_DOUBLE); 
END; 

Works fine th途中で!

関連する問題