2009-08-26 209 views
4

我喜歡在Oracle數據庫保存不同的C#的數據類型(int,小數,雙,字符串,GUID ...)。有沒有人有一個表顯示使用什麼樣的oracle數據類型?C#數據類型 - > Oracle數據

我發現表格顯示什麼C#的數據類型來使用不同的Oracle數據類型,而不是周圍的其他方法。

回答

10

我不知道這是否有助於或沒有,但這是從ODP.NET使用.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); 
} 

內部,它看起來像ODP.NET使用這個(以及一些其他地圖)來確定數據類型。另外,要處理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 2009-11-26 09:34:12

1

我問關於SQL Server數據類型類似的問題,並得到this answer可能有一些對你的相關性爲好。

+0

是的問題是一樣的。但該解決方案不包含Oracle特定的數據類型轉換。 – Rolf 2009-08-26 14:19:55

+0

我們目前遇到數據類型問題。我們已經通過NUMBER(18,3)和DATE等數據類型的字段創建了我們的表。我們在oracle中爲UDT創建了相關對象,並使用vs2010 odp.net附加組件獲得了類。目前,我們可以插入NVARCHAR2,但NUMBER或DATE值爲NULL。我搜尋了一個類似的問題,不要再重複一遍。如果不是,我會將它帶到問題部分。任何建議都會很棒。感謝您的關注 – 2010-12-07 16:07:59