我喜歡在Oracle數據庫保存不同的C#的數據類型(int,小數,雙,字符串,GUID ...)。有沒有人有一個表顯示使用什麼樣的oracle數據類型?C#數據類型 - > Oracle數據
我發現表格顯示什麼C#的數據類型來使用不同的Oracle數據類型,而不是周圍的其他方法。
我喜歡在Oracle數據庫保存不同的C#的數據類型(int,小數,雙,字符串,GUID ...)。有沒有人有一個表顯示使用什麼樣的oracle數據類型?C#數據類型 - > Oracle數據
我發現表格顯示什麼C#的數據類型來使用不同的Oracle數據類型,而不是周圍的其他方法。
我不知道這是否有助於或沒有,但這是從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;
}
我問關於SQL Server數據類型類似的問題,並得到this answer可能有一些對你的相關性爲好。
是的問題是一樣的。但該解決方案不包含Oracle特定的數據類型轉換。 – Rolf 2009-08-26 14:19:55
我們目前遇到數據類型問題。我們已經通過NUMBER(18,3)和DATE等數據類型的字段創建了我們的表。我們在oracle中爲UDT創建了相關對象,並使用vs2010 odp.net附加組件獲得了類。目前,我們可以插入NVARCHAR2,但NUMBER或DATE值爲NULL。我搜尋了一個類似的問題,不要再重複一遍。如果不是,我會將它帶到問題部分。任何建議都會很棒。感謝您的關注 – 2010-12-07 16:07:59
謝謝您的回答!這給了我一些選擇的線索。 – Rolf 2009-11-26 09:34:12