c#datatypes – > oracle数据类型

我喜欢在Oracle数据库中保存不同的c#数据类型(int,decimal,double,string,Guid,…)。 有没有人有一个表格显示要使用的oracle数据类型?

我找到了表格,显示了用于不同oracle数据类型的c#数据类型,但不是相反。

我不确定这是否有帮助,但这是使用.NET Reflector从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); } 

在内部,看起来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数据类型的类似问题,得到的答案也可能对你有所帮助。