internal static OracleType ValueTypeToOracleType(Type type) {
switch (Type.GetTypeCode(type)) {
case TypeCode.Boolean: return OracleType.Byte;
case TypeCode.Byte: return OracleType.Byte;
case TypeCode.Char: return OracleType.Char;
case TypeCode.DateTime: return OracleType.DateTime;
// case TypeCode.DBNull: return OracleType.Empty;
case TypeCode.Decimal: return OracleType.Number;
case TypeCode.Double: return OracleType.Double;
// case TypeCode.Empty: return OracleType.Empty;
case TypeCode.Int16: return OracleType.Int16;
case TypeCode.Int32: return OracleType.Int32;
case TypeCode.Int64: return OracleType.Number;
default:
case TypeCode.Object: {
if (type.Equals(TypeOfByteArray)) return OracleType.Blob;
if (type.Equals(TypeOfTimespan)) return OracleType.Timestamp;
if (type.IsSubclassOf(TypeOfIDataReader)) return OracleType.Cursor;
// if (type.Equals(DbTypes.TypeOfGuid)) return OracleType.Guid;
//
if (type.IsEnum)
return ValueTypeToOracleType (Enum.GetUnderlyingType (type));
//
return OracleType.VarChar;
}
case TypeCode.SByte: return OracleType.SByte;
case TypeCode.Single: return OracleType.Float;
case TypeCode.String: return OracleType.VarChar;
case TypeCode.UInt16: return OracleType.UInt16;
case TypeCode.UInt32: return OracleType.UInt32;
case TypeCode.UInt64: return OracleType.Number;
}
}