Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#数据类型->;oracle数据类型_C#_Oracle_Types_Odp.net - Fatal编程技术网

c#数据类型->;oracle数据类型

c#数据类型->;oracle数据类型,c#,oracle,types,odp.net,C#,Oracle,Types,Odp.net,我喜欢在Oracle数据库中保存不同的c#数据类型(int、decimal、double、string、Guid等)。是否有人有一个表显示要使用的oracle数据类型 我找到了一些表格,这些表格显示了不同oracle数据类型要使用哪些c#数据类型,但不是相反。我不确定这是否有帮助,但这是使用.NET Reflector从ODP.NET程序集获取的: internal static void InsertTableEntries() { s_table.Add(typeof(byte),

我喜欢在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似乎使用此映射(以及其他一些映射)来确定数据类型。此外,要处理数字数据类型,请执行以下操作:

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;
}
内部静态OracleDbType转换器numberToOradbType(整数精度,整数刻度)
{
OracleDbType@decimal=OracleDbType.decimal;

谢谢你的回答!这给了我一些选择的线索。