2009-08-26 11 views
4

Oracleデータベース(int、decimal、double、string、Guid、...)に異なるC#データ型を保存するのが好きです。誰でも使用するOracleデータ型を示す表がありますか?c#datatypes - > oracleデータ型

異なるOracleデータ型に使用するc#データ型を示す表が見つかりましたが、その逆はありません。

答えて

10

私はこのことができますかどうかわからないんだけど、これは.NETリフレクターを使用してODP.NETアセンブリから取られた:ODP.NETは、これを使用しています(といくつかのように

internal static void InsertTableEntries() 
{ 
    s_table.Add(typeof(byte), OracleDbType.Byte); 
    s_table.Add(typeof(byte[]), OracleDbType.Raw); 
    s_table.Add(typeof(char), OracleDbType.Varchar2); 
    s_table.Add(typeof(char[]), OracleDbType.Varchar2); 
    s_table.Add(typeof(DateTime), OracleDbType.TimeStamp); 
    s_table.Add(typeof(short), OracleDbType.Int16); 
    s_table.Add(typeof(int), OracleDbType.Int32); 
    s_table.Add(typeof(long), OracleDbType.Int64); 
    s_table.Add(typeof(float), OracleDbType.Single); 
    s_table.Add(typeof(double), OracleDbType.Double); 
    s_table.Add(typeof(decimal), OracleDbType.Decimal); 
    s_table.Add(typeof(string), OracleDbType.Varchar2); 
    s_table.Add(typeof(TimeSpan), OracleDbType.IntervalDS); 
    s_table.Add(typeof(OracleBFile), OracleDbType.BFile); 
    s_table.Add(typeof(OracleBinary), OracleDbType.Raw); 
    s_table.Add(typeof(OracleBlob), OracleDbType.Blob); 
    s_table.Add(typeof(OracleClob), OracleDbType.Clob); 
    s_table.Add(typeof(OracleDate), OracleDbType.Date); 
    s_table.Add(typeof(OracleDecimal), OracleDbType.Decimal); 
    s_table.Add(typeof(OracleIntervalDS), OracleDbType.IntervalDS); 
    s_table.Add(typeof(OracleIntervalYM), OracleDbType.IntervalYM); 
    s_table.Add(typeof(OracleRefCursor), OracleDbType.RefCursor); 
    s_table.Add(typeof(OracleString), OracleDbType.Varchar2); 
    s_table.Add(typeof(OracleTimeStamp), OracleDbType.TimeStamp); 
    s_table.Add(typeof(OracleTimeStampLTZ), OracleDbType.TimeStampLTZ); 
    s_table.Add(typeof(OracleTimeStampTZ), OracleDbType.TimeStampTZ); 
    s_table.Add(typeof(OracleXmlType), OracleDbType.XmlType); 
    s_table.Add(typeof(OracleRef), OracleDbType.Ref); 
} 

内部的に見えます他のマップ)を使用してデータ型を決定します。また、NUMBERデータ型を処理するには、

internal static OracleDbType ConvertNumberToOraDbType(int precision, int scale) 
{ 
    OracleDbType @decimal = OracleDbType.Decimal; 
    if ((scale <= 0) && ((precision - scale) < 5)) 
    { 
     return OracleDbType.Int16; 
    } 
    if ((scale <= 0) && ((precision - scale) < 10)) 
    { 
     return OracleDbType.Int32; 
    } 
    if ((scale <= 0) && ((precision - scale) < 0x13)) 
    { 
     return OracleDbType.Int64; 
    } 
    if ((precision < 8) && (((scale <= 0) && ((precision - scale) <= 0x26)) || ((scale > 0) && (scale <= 0x2c)))) 
    { 
     return OracleDbType.Single; 
    } 
    if (precision < 0x10) 
    { 
     @decimal = OracleDbType.Double; 
    } 
    return @decimal; 
} 
+0

答えをありがとう!これは私に何を選ぶかの手がかりを与えます。 – Rolf

1

私はSQL Serverのデータ型に関して同様の質問をしており、this answerもありますが、これには関連性があります。

+0

はい問題は同じです。しかし、このソリューションには、データ型のOracle固有の変換は含まれていません。 – Rolf

+0

現在、データ型に問題があります。私たちは、NUMBER(18,3)やDATEのようなデータ型のフィールドを使ってテーブルを作成しました.OracleでUDTの関連オブジェクトを作成し、vs2010 odp.netアドオンを使用してクラスを作成しました。現在、NVARCHAR2を挿入できますが、NUMBERまたはDATEの値はNULLになります。私は再びそれを繰り返さないように似たような質問を探しました。もし私がそれを質問セクションに持って行くのでなければ、どんな勧告も素晴らしいだろう。あなたの懸念をありがとう –

関連する問題