コード例 #1
0
 static MetaType()
 {
     oracleTypeMetaType[1] = new MetaType(System.Data.DbType.Binary, System.Data.OracleClient.OracleType.BFile, OCI.DATATYPE.BFILE, "BFILE", typeof(byte[]), typeof(OracleBFile), IntPtr.Size, IntPtr.Size, false);
     oracleTypeMetaType[2] = new MetaType(System.Data.DbType.Binary, System.Data.OracleClient.OracleType.Blob, OCI.DATATYPE.BLOB, "BLOB", typeof(byte[]), typeof(OracleLob), IntPtr.Size, IntPtr.Size, false);
     oracleTypeMetaType[3] = dbTypeMetaType[0x16];
     oracleTypeMetaType[4] = new MetaType(System.Data.DbType.AnsiString, System.Data.OracleClient.OracleType.Clob, OCI.DATATYPE.CLOB, "CLOB", typeof(string), typeof(OracleLob), IntPtr.Size, IntPtr.Size, false);
     oracleTypeMetaType[5] = new MetaType(System.Data.DbType.Object, System.Data.OracleClient.OracleType.Cursor, OCI.DATATYPE.RSET, "REF CURSOR", typeof(object), typeof(object), IntPtr.Size, IntPtr.Size, false);
     oracleTypeMetaType[6] = dbTypeMetaType[6];
     oracleTypeMetaType[8] = new MetaType(System.Data.DbType.Int32, System.Data.OracleClient.OracleType.IntervalYearToMonth, OCI.DATATYPE.INT_INTERVAL_YM, "INTERVAL YEAR TO MONTH", typeof(int), typeof(OracleMonthSpan), 5, 5, false);
     oracleTypeMetaType[7] = new MetaType(System.Data.DbType.Object, System.Data.OracleClient.OracleType.IntervalDayToSecond, OCI.DATATYPE.INT_INTERVAL_DS, "INTERVAL DAY TO SECOND", typeof(TimeSpan), typeof(OracleTimeSpan), 11, 11, false);
     oracleTypeMetaType[9] = new MetaType(System.Data.DbType.Binary, System.Data.OracleClient.OracleType.LongRaw, OCI.DATATYPE.LONGRAW, "LONG RAW", typeof(byte[]), typeof(OracleBinary), 0x7fffffff, 0x7fbc, false);
     oracleTypeMetaType[10] = new MetaType(System.Data.DbType.AnsiString, System.Data.OracleClient.OracleType.LongVarChar, OCI.DATATYPE.LONG, "LONG", typeof(string), typeof(OracleString), 0x7fffffff, 0x7fbc, false);
     oracleTypeMetaType[11] = dbTypeMetaType[0x17];
     oracleTypeMetaType[12] = new MetaType(System.Data.DbType.String, System.Data.OracleClient.OracleType.NClob, OCI.DATATYPE.CLOB, "NCLOB", typeof(string), typeof(OracleLob), IntPtr.Size, IntPtr.Size, true);
     oracleTypeMetaType[13] = dbTypeMetaType[0x15];
     oracleTypeMetaType[14] = dbTypeMetaType[0x10];
     oracleTypeMetaType[15] = dbTypeMetaType[1];
     oracleTypeMetaType[0x10] = new MetaType(System.Data.DbType.AnsiString, System.Data.OracleClient.OracleType.RowId, OCI.DATATYPE.VARCHAR2, "ROWID", typeof(string), typeof(OracleString), 0xf6e, 0xf6e, false);
     oracleTypeMetaType[0x12] = new MetaType(System.Data.DbType.DateTime, System.Data.OracleClient.OracleType.Timestamp, OCI.DATATYPE.INT_TIMESTAMP, "TIMESTAMP", typeof(DateTime), typeof(OracleDateTime), 11, 11, false);
     oracleTypeMetaType[0x13] = new MetaType(System.Data.DbType.DateTime, System.Data.OracleClient.OracleType.TimestampLocal, OCI.DATATYPE.INT_TIMESTAMP_LTZ, "TIMESTAMP WITH LOCAL TIME ZONE", typeof(DateTime), typeof(OracleDateTime), 11, 11, false);
     oracleTypeMetaType[20] = new MetaType(System.Data.DbType.DateTime, System.Data.OracleClient.OracleType.TimestampWithTZ, OCI.DATATYPE.INT_TIMESTAMP_TZ, "TIMESTAMP WITH TIME ZONE", typeof(DateTime), typeof(OracleDateTime), 13, 13, false);
     oracleTypeMetaType[0x16] = dbTypeMetaType[0];
     oracleTypeMetaType[0x17] = dbTypeMetaType[2];
     oracleTypeMetaType[0x18] = dbTypeMetaType[0x12];
     oracleTypeMetaType[0x19] = dbTypeMetaType[0x13];
     oracleTypeMetaType[0x1a] = dbTypeMetaType[14];
     oracleTypeMetaType[0x1b] = dbTypeMetaType[10];
     oracleTypeMetaType[0x1c] = dbTypeMetaType[11];
     oracleTypeMetaType[0x1d] = dbTypeMetaType[15];
     oracleTypeMetaType[30] = dbTypeMetaType[8];
     oracleTypeMetaType_LONGVARCHAR = new MetaType(System.Data.DbType.AnsiString, System.Data.OracleClient.OracleType.VarChar, OCI.DATATYPE.LONGVARCHAR, "VARCHAR2", typeof(string), typeof(OracleString), 0, 0x7fffffff, false);
     oracleTypeMetaType_LONGVARRAW = new MetaType(System.Data.DbType.Binary, System.Data.OracleClient.OracleType.Raw, OCI.DATATYPE.LONGVARRAW, "RAW", typeof(byte[]), typeof(OracleBinary), 0, 0x7fffffff, false);
     oracleTypeMetaType_LONGNVARCHAR = new MetaType(System.Data.DbType.String, System.Data.OracleClient.OracleType.NVarChar, OCI.DATATYPE.LONGVARCHAR, "NVARCHAR2", typeof(string), typeof(OracleString), 0, 0x7fffffff, true);
 }
 private static object CoerceValue(object value, MetaType destinationType)
 {
     if (((value != null) && !Convert.IsDBNull(value)) && (typeof(object) != destinationType.BaseType))
     {
         Type type = value.GetType();
         if (!(type != destinationType.BaseType) || !(type != destinationType.NoConvertType))
         {
             return value;
         }
         try
         {
             if ((typeof(string) == destinationType.BaseType) && (typeof(char[]) == type))
             {
                 value = new string((char[]) value);
                 return value;
             }
             if ((System.Data.DbType.Currency == destinationType.DbType) && (typeof(string) == type))
             {
                 value = decimal.Parse((string) value, NumberStyles.Currency, null);
                 return value;
             }
             value = Convert.ChangeType(value, destinationType.BaseType, null);
         }
         catch (Exception exception)
         {
             if (!System.Data.Common.ADP.IsCatchableExceptionType(exception))
             {
                 throw;
             }
             throw System.Data.Common.ADP.ParameterConversionFailed(value, destinationType.BaseType, exception);
         }
     }
     return value;
 }
コード例 #3
0
        internal void PrepareForBind(OracleConnection connection, ref int offset)
        {
            OracleParameter parameter = this.Parameter;
            bool            flag      = false;
            object          obj2      = parameter.Value;

            if (!IsDirection(parameter, ParameterDirection.Output) && (obj2 == null))
            {
                this._bufferLength = 0;
            }
            else
            {
                this._bindingMetaType = parameter.GetMetaType(obj2);
                if ((OCI.DATATYPE.RSET == this._bindingMetaType.OciType) && System.Data.Common.ADP.IsDirection(parameter.Direction, ParameterDirection.Input))
                {
                    throw System.Data.Common.ADP.InputRefCursorNotSupported(parameter.ParameterName);
                }
                parameter.SetCoercedValueInternal(obj2, this._bindingMetaType);
                this._coercedValue = parameter.GetCoercedValueInternal();
                switch (this._bindingMetaType.OciType)
                {
                case OCI.DATATYPE.CLOB:
                case OCI.DATATYPE.BLOB:
                case OCI.DATATYPE.BFILE:
                    if ((!System.Data.Common.ADP.IsNull(this._coercedValue) && !(this._coercedValue is OracleLob)) && !(this._coercedValue is OracleBFile))
                    {
                        if (!connection.HasTransaction)
                        {
                            this._bindingMetaType = MetaType.GetMetaTypeForType(this._bindingMetaType.DbType);
                            flag = true;
                            break;
                        }
                        this._freeTemporaryLob = true;
                        this._coercedValue     = this.CreateTemporaryLobForValue(connection, this._bindingMetaType.OracleType, this._coercedValue);
                    }
                    break;
                }
                this._bindSize = this._bindingMetaType.BindSize;
                if (((IsDirection(parameter, ParameterDirection.Output) && this._bindingMetaType.IsVariableLength) || ((this._bindSize == 0) && !System.Data.Common.ADP.IsNull(this._coercedValue))) || (this._bindSize > 0x7fff))
                {
                    int bindSize = parameter.BindSize;
                    if (bindSize != 0)
                    {
                        this._bindSize = bindSize;
                    }
                    if (((this._bindSize == 0) || (0x7fffffff == this._bindSize)) && !this.IsEmpty(this._coercedValue))
                    {
                        throw System.Data.Common.ADP.ParameterSizeIsMissing(parameter.ParameterName, this._bindingMetaType.BaseType);
                    }
                }
                this._bufferLength = this._bindSize;
                if (this._bindingMetaType.IsCharacterType && connection.ServerVersionAtLeastOracle8)
                {
                    this._bindAsUCS2    = true;
                    this._bufferLength *= System.Data.Common.ADP.CharSize;
                }
                if (!System.Data.Common.ADP.IsNull(this._coercedValue) && ((this._bindSize > this._bindingMetaType.MaxBindSize) || flag))
                {
                    switch (this._bindingMetaType.OciType)
                    {
                    case OCI.DATATYPE.RAW:
                    case OCI.DATATYPE.LONGRAW:
                        this._bindingMetaType = MetaType.oracleTypeMetaType_LONGVARRAW;
                        break;

                    case OCI.DATATYPE.CHAR:
                    case OCI.DATATYPE.VARCHAR2:
                    case OCI.DATATYPE.LONG:
                        this._bindingMetaType = this._bindingMetaType.UsesNationalCharacterSet ? MetaType.oracleTypeMetaType_LONGNVARCHAR : MetaType.oracleTypeMetaType_LONGVARCHAR;
                        break;
                    }
                    this._bufferLength += 4;
                }
                if (0 > this._bufferLength)
                {
                    throw System.Data.Common.ADP.ParameterSizeIsTooLarge(parameter.ParameterName);
                }
                this._indicatorOffset = offset;
                offset            += IntPtr.Size;
                this._lengthOffset = offset;
                offset            += IntPtr.Size;
                this._valueOffset  = offset;
                offset            += this._bufferLength;
                offset             = (offset + (IntPtr.Size - 1)) & ~(IntPtr.Size - 1);
            }
        }
        internal void PrepareForBind(OracleConnection connection, ref int offset)
        {
            OracleParameter parameter = this.Parameter;
            bool flag = false;
            object obj2 = parameter.Value;
            if (!IsDirection(parameter, ParameterDirection.Output) && (obj2 == null))
            {
                this._bufferLength = 0;
            }
            else
            {
                this._bindingMetaType = parameter.GetMetaType(obj2);
                if ((OCI.DATATYPE.RSET == this._bindingMetaType.OciType) && System.Data.Common.ADP.IsDirection(parameter.Direction, ParameterDirection.Input))
                {
                    throw System.Data.Common.ADP.InputRefCursorNotSupported(parameter.ParameterName);
                }
                parameter.SetCoercedValueInternal(obj2, this._bindingMetaType);
                this._coercedValue = parameter.GetCoercedValueInternal();
                switch (this._bindingMetaType.OciType)
                {
                    case OCI.DATATYPE.CLOB:
                    case OCI.DATATYPE.BLOB:
                    case OCI.DATATYPE.BFILE:
                        if ((!System.Data.Common.ADP.IsNull(this._coercedValue) && !(this._coercedValue is OracleLob)) && !(this._coercedValue is OracleBFile))
                        {
                            if (!connection.HasTransaction)
                            {
                                this._bindingMetaType = MetaType.GetMetaTypeForType(this._bindingMetaType.DbType);
                                flag = true;
                                break;
                            }
                            this._freeTemporaryLob = true;
                            this._coercedValue = this.CreateTemporaryLobForValue(connection, this._bindingMetaType.OracleType, this._coercedValue);
                        }
                        break;
                }
                this._bindSize = this._bindingMetaType.BindSize;
                if (((IsDirection(parameter, ParameterDirection.Output) && this._bindingMetaType.IsVariableLength) || ((this._bindSize == 0) && !System.Data.Common.ADP.IsNull(this._coercedValue))) || (this._bindSize > 0x7fff))
                {
                    int bindSize = parameter.BindSize;
                    if (bindSize != 0)
                    {
                        this._bindSize = bindSize;
                    }
                    if (((this._bindSize == 0) || (0x7fffffff == this._bindSize)) && !this.IsEmpty(this._coercedValue))
                    {
                        throw System.Data.Common.ADP.ParameterSizeIsMissing(parameter.ParameterName, this._bindingMetaType.BaseType);
                    }
                }
                this._bufferLength = this._bindSize;
                if (this._bindingMetaType.IsCharacterType && connection.ServerVersionAtLeastOracle8)
                {
                    this._bindAsUCS2 = true;
                    this._bufferLength *= System.Data.Common.ADP.CharSize;
                }
                if (!System.Data.Common.ADP.IsNull(this._coercedValue) && ((this._bindSize > this._bindingMetaType.MaxBindSize) || flag))
                {
                    switch (this._bindingMetaType.OciType)
                    {
                        case OCI.DATATYPE.RAW:
                        case OCI.DATATYPE.LONGRAW:
                            this._bindingMetaType = MetaType.oracleTypeMetaType_LONGVARRAW;
                            break;

                        case OCI.DATATYPE.CHAR:
                        case OCI.DATATYPE.VARCHAR2:
                        case OCI.DATATYPE.LONG:
                            this._bindingMetaType = this._bindingMetaType.UsesNationalCharacterSet ? MetaType.oracleTypeMetaType_LONGNVARCHAR : MetaType.oracleTypeMetaType_LONGVARCHAR;
                            break;
                    }
                    this._bufferLength += 4;
                }
                if (0 > this._bufferLength)
                {
                    throw System.Data.Common.ADP.ParameterSizeIsTooLarge(parameter.ParameterName);
                }
                this._indicatorOffset = offset;
                offset += IntPtr.Size;
                this._lengthOffset = offset;
                offset += IntPtr.Size;
                this._valueOffset = offset;
                offset += this._bufferLength;
                offset = (offset + (IntPtr.Size - 1)) & ~(IntPtr.Size - 1);
            }
        }
コード例 #5
0
 internal static string MarshalToString(NativeBuffer buffer, int valueOffset, int lengthOffset, MetaType metaType, OracleConnection connection, bool boundAsUCS2, bool outputParameterBinding)
 {
     string str;
     int length = GetLength(buffer, lengthOffset, metaType);
     if (boundAsUCS2 && outputParameterBinding)
     {
         length /= 2;
     }
     bool flag = metaType.IsLong && !outputParameterBinding;
     if (boundAsUCS2)
     {
         if (flag)
         {
             byte[] destinationBuffer = new byte[length * System.Data.Common.ADP.CharSize];
             NativeBuffer_LongColumnData.CopyOutOfLineBytes(buffer.ReadIntPtr(valueOffset), 0, destinationBuffer, 0, length * System.Data.Common.ADP.CharSize);
             str = Encoding.Unicode.GetString(destinationBuffer);
         }
         else
         {
             str = buffer.PtrToStringUni(valueOffset, length);
         }
     }
     else
     {
         byte[] buffer2;
         if (flag)
         {
             buffer2 = new byte[length];
             NativeBuffer_LongColumnData.CopyOutOfLineBytes(buffer.ReadIntPtr(valueOffset), 0, buffer2, 0, length);
         }
         else
         {
             buffer2 = buffer.ReadBytes(valueOffset, length);
         }
         str = connection.GetString(buffer2, metaType.UsesNationalCharacterSet);
     }
     GC.KeepAlive(buffer);
     return str;
 }
コード例 #6
0
 internal static int GetChars(NativeBuffer buffer, int valueOffset, int lengthOffset, MetaType metaType, OracleConnection connection, bool boundAsUCS2, int sourceOffset, char[] destinationBuffer, int destinationOffset, int charCount)
 {
     bool success = false;
     RuntimeHelpers.PrepareConstrainedRegions();
     try
     {
         buffer.DangerousAddRef(ref success);
         if (boundAsUCS2)
         {
             if (!metaType.IsLong)
             {
                 Marshal.Copy(buffer.DangerousGetDataPtrWithBaseOffset(valueOffset + (System.Data.Common.ADP.CharSize * sourceOffset)), destinationBuffer, destinationOffset, charCount);
                 return charCount;
             }
             NativeBuffer_LongColumnData.CopyOutOfLineChars(buffer.ReadIntPtr(valueOffset), sourceOffset, destinationBuffer, destinationOffset, charCount);
             return charCount;
         }
         string str = MarshalToString(buffer, valueOffset, lengthOffset, metaType, connection, boundAsUCS2, false);
         int length = str.Length;
         int num = ((sourceOffset + charCount) > length) ? (length - sourceOffset) : charCount;
         Buffer.BlockCopy(str.ToCharArray(sourceOffset, num), 0, destinationBuffer, destinationOffset * System.Data.Common.ADP.CharSize, num * System.Data.Common.ADP.CharSize);
         charCount = num;
     }
     finally
     {
         if (success)
         {
             buffer.DangerousRelease();
         }
     }
     return charCount;
 }
コード例 #7
0
 internal static int GetLength(NativeBuffer buffer, int lengthOffset, MetaType metaType)
 {
     if (metaType.IsLong)
     {
         return buffer.ReadInt32(lengthOffset);
     }
     return buffer.ReadInt16(lengthOffset);
 }
 internal void SetCoercedValueInternal(object value, MetaType metaType)
 {
     this._coercedMetaType = metaType;
     this.CoercedValue = CoerceValue(value, metaType);
 }
コード例 #9
0
 internal static byte[] GetBytesFromDescriptor(OciDateTimeDescriptor dateTimeDescriptor, MetaType metaType, OracleConnection connection)
 {
     uint num2;
     OCI.DATATYPE ociType = metaType.OciType;
     OCI.DATATYPE datatype2 = ociType;
     if (datatype2 == OCI.DATATYPE.INT_TIMESTAMP)
     {
         num2 = 11;
     }
     else if (datatype2 == OCI.DATATYPE.INT_TIMESTAMP_LTZ)
     {
         num2 = 13;
     }
     else
     {
         num2 = 13;
     }
     byte[] outarray = new byte[num2];
     uint len = num2;
     OciIntervalDescriptor reftz = new OciIntervalDescriptor(connection.EnvironmentHandle);
     int rc = System.Data.Common.UnsafeNativeMethods.OCIDateTimeToArray(connection.EnvironmentHandle, connection.ErrorHandle, dateTimeDescriptor, reftz, outarray, ref len, 9);
     if (rc != 0)
     {
         connection.CheckError(connection.ErrorHandle, rc);
     }
     if (OCI.DATATYPE.INT_TIMESTAMP_LTZ == ociType)
     {
         TimeSpan serverTimeZoneAdjustmentToUTC = connection.ServerTimeZoneAdjustmentToUTC;
         outarray[11] = (byte) (serverTimeZoneAdjustmentToUTC.Hours + 20);
         outarray[12] = (byte) (serverTimeZoneAdjustmentToUTC.Minutes + 60);
         return outarray;
     }
     if (OCI.DATATYPE.INT_TIMESTAMP_TZ == ociType)
     {
         sbyte num3;
         sbyte num4;
         rc = System.Data.Common.UnsafeNativeMethods.OCIDateTimeGetTimeZoneOffset(connection.EnvironmentHandle, connection.ErrorHandle, dateTimeDescriptor, out num4, out num3);
         if (rc != 0)
         {
             connection.CheckError(connection.ErrorHandle, rc);
         }
         outarray[11] = (byte) (num4 + 20);
         outarray[12] = (byte) (num3 + 60);
     }
     return outarray;
 }
コード例 #10
0
 internal OracleString(NativeBuffer buffer, int valueOffset, int lengthOffset, MetaType metaType, OracleConnection connection, bool boundAsUCS2, bool outputParameterBinding)
 {
     this._value = MarshalToString(buffer, valueOffset, lengthOffset, metaType, connection, boundAsUCS2, outputParameterBinding);
 }
コード例 #11
0
        internal static string MarshalToString(NativeBuffer buffer, int valueOffset, int lengthOffset, MetaType metaType, OracleConnection connection, bool boundAsUCS2, bool outputParameterBinding)
        {
            string str;
            int    length = GetLength(buffer, lengthOffset, metaType);

            if (boundAsUCS2 && outputParameterBinding)
            {
                length /= 2;
            }
            bool flag = metaType.IsLong && !outputParameterBinding;

            if (boundAsUCS2)
            {
                if (flag)
                {
                    byte[] destinationBuffer = new byte[length * System.Data.Common.ADP.CharSize];
                    NativeBuffer_LongColumnData.CopyOutOfLineBytes(buffer.ReadIntPtr(valueOffset), 0, destinationBuffer, 0, length * System.Data.Common.ADP.CharSize);
                    str = Encoding.Unicode.GetString(destinationBuffer);
                }
                else
                {
                    str = buffer.PtrToStringUni(valueOffset, length);
                }
            }
            else
            {
                byte[] buffer2;
                if (flag)
                {
                    buffer2 = new byte[length];
                    NativeBuffer_LongColumnData.CopyOutOfLineBytes(buffer.ReadIntPtr(valueOffset), 0, buffer2, 0, length);
                }
                else
                {
                    buffer2 = buffer.ReadBytes(valueOffset, length);
                }
                str = connection.GetString(buffer2, metaType.UsesNationalCharacterSet);
            }
            GC.KeepAlive(buffer);
            return(str);
        }
コード例 #12
0
        internal static int GetChars(NativeBuffer buffer, int valueOffset, int lengthOffset, MetaType metaType, OracleConnection connection, bool boundAsUCS2, int sourceOffset, char[] destinationBuffer, int destinationOffset, int charCount)
        {
            bool success = false;

            RuntimeHelpers.PrepareConstrainedRegions();
            try
            {
                buffer.DangerousAddRef(ref success);
                if (boundAsUCS2)
                {
                    if (!metaType.IsLong)
                    {
                        Marshal.Copy(buffer.DangerousGetDataPtrWithBaseOffset(valueOffset + (System.Data.Common.ADP.CharSize * sourceOffset)), destinationBuffer, destinationOffset, charCount);
                        return(charCount);
                    }
                    NativeBuffer_LongColumnData.CopyOutOfLineChars(buffer.ReadIntPtr(valueOffset), sourceOffset, destinationBuffer, destinationOffset, charCount);
                    return(charCount);
                }
                string str    = MarshalToString(buffer, valueOffset, lengthOffset, metaType, connection, boundAsUCS2, false);
                int    length = str.Length;
                int    num    = ((sourceOffset + charCount) > length) ? (length - sourceOffset) : charCount;
                Buffer.BlockCopy(str.ToCharArray(sourceOffset, num), 0, destinationBuffer, destinationOffset * System.Data.Common.ADP.CharSize, num * System.Data.Common.ADP.CharSize);
                charCount = num;
            }
            finally
            {
                if (success)
                {
                    buffer.DangerousRelease();
                }
            }
            return(charCount);
        }
コード例 #13
0
        internal static OracleString GetPersistedRowid(OracleConnection connection, OciRowidDescriptor rowidHandle)
        {
            OracleString @null = OracleString.Null;

            if (rowidHandle != null)
            {
                OciErrorHandle errorHandle   = connection.ErrorHandle;
                NativeBuffer   scratchBuffer = connection.GetScratchBuffer(0xf82);
                bool           success       = false;
                bool           flag          = false;
                RuntimeHelpers.PrepareConstrainedRegions();
                try
                {
                    int num;
                    scratchBuffer.DangerousAddRef(ref success);
                    if (OCI.ClientVersionAtLeastOracle9i)
                    {
                        int length = scratchBuffer.Length;
                        num = TracedNativeMethods.OCIRowidToChar(rowidHandle, scratchBuffer, ref length, errorHandle);
                        if (num != 0)
                        {
                            connection.CheckError(errorHandle, num);
                        }
                        return(new OracleString(scratchBuffer.PtrToStringAnsi(0, length)));
                    }
                    rowidHandle.DangerousAddRef(ref flag);
                    OciServiceContextHandle serviceContextHandle = connection.ServiceContextHandle;
                    OciStatementHandle      stmtp = new OciStatementHandle(serviceContextHandle);
                    string stmt   = "begin :rowid := :rdesc; end;";
                    int    offset = 0;
                    int    num6   = 4;
                    int    num5   = 8;
                    int    num3   = 12;
                    int    num2   = 0x10;
                    int    num4   = 20;
                    try
                    {
                        IntPtr ptr;
                        IntPtr ptr2;
                        num = TracedNativeMethods.OCIStmtPrepare(stmtp, errorHandle, stmt, OCI.SYNTAX.OCI_NTV_SYNTAX, OCI.MODE.OCI_DEFAULT, connection);
                        if (num != 0)
                        {
                            connection.CheckError(errorHandle, num);
                        }
                        scratchBuffer.WriteIntPtr(num5, rowidHandle.DangerousGetHandle());
                        scratchBuffer.WriteInt32(offset, 0);
                        scratchBuffer.WriteInt32(num6, 4);
                        scratchBuffer.WriteInt32(num3, 0);
                        scratchBuffer.WriteInt32(num2, 0xf6e);
                        num = TracedNativeMethods.OCIBindByName(stmtp, out ptr2, errorHandle, "rowid", 5, scratchBuffer.DangerousGetDataPtr(num4), 0xf6e, OCI.DATATYPE.VARCHAR2, scratchBuffer.DangerousGetDataPtr(num3), scratchBuffer.DangerousGetDataPtr(num2), OCI.MODE.OCI_DEFAULT);
                        if (num != 0)
                        {
                            connection.CheckError(errorHandle, num);
                        }
                        num = TracedNativeMethods.OCIBindByName(stmtp, out ptr, errorHandle, "rdesc", 5, scratchBuffer.DangerousGetDataPtr(num5), 4, OCI.DATATYPE.ROWID_DESC, scratchBuffer.DangerousGetDataPtr(offset), scratchBuffer.DangerousGetDataPtr(num6), OCI.MODE.OCI_DEFAULT);
                        if (num != 0)
                        {
                            connection.CheckError(errorHandle, num);
                        }
                        num = TracedNativeMethods.OCIStmtExecute(serviceContextHandle, stmtp, errorHandle, 1, OCI.MODE.OCI_DEFAULT);
                        if (num != 0)
                        {
                            connection.CheckError(errorHandle, num);
                        }
                        if (scratchBuffer.ReadInt16(num3) == -1)
                        {
                            return(@null);
                        }
                        @null = new OracleString(scratchBuffer, num4, num2, MetaType.GetMetaTypeForType(OracleType.RowId), connection, false, true);
                        GC.KeepAlive(rowidHandle);
                    }
                    finally
                    {
                        OciHandle.SafeDispose(ref stmtp);
                    }
                }
                finally
                {
                    if (flag)
                    {
                        rowidHandle.DangerousRelease();
                    }
                    if (success)
                    {
                        scratchBuffer.DangerousRelease();
                    }
                }
            }
            return(@null);
        }
コード例 #14
0
        internal int PutOracleValue(object value, NativeBuffer buffer, int bufferOffset, MetaType metaType, OracleConnection connection, ref SafeHandle handleToBind)
        {
            handleToBind = null;
            OCI.DATATYPE    ociType   = metaType.OciType;
            OracleParameter parameter = this.Parameter;

            switch (ociType)
            {
            case OCI.DATATYPE.VARCHAR2:
            case OCI.DATATYPE.LONG:
            case OCI.DATATYPE.LONGVARCHAR:
            case OCI.DATATYPE.CHAR:
                return(OracleString.MarshalToNative(value, parameter.Offset, parameter.GetActualSize(), buffer, bufferOffset, ociType, this._bindAsUCS2));

            case OCI.DATATYPE.INTEGER:
            case OCI.DATATYPE.FLOAT:
            case OCI.DATATYPE.UNSIGNEDINT:
                buffer.StructureToPtr(bufferOffset, value);
                return(metaType.BindSize);

            case OCI.DATATYPE.VARNUM:
                return(OracleNumber.MarshalToNative(value, buffer, bufferOffset, connection));

            case OCI.DATATYPE.DATE:
                return(OracleDateTime.MarshalDateToNative(value, buffer, bufferOffset, ociType, connection));

            case OCI.DATATYPE.RAW:
            case OCI.DATATYPE.LONGRAW:
            case OCI.DATATYPE.LONGVARRAW:
            {
                int    num;
                byte[] buffer2;
                if (this._coercedValue is OracleBinary)
                {
                    OracleBinary binary = (OracleBinary)this._coercedValue;
                    buffer2 = binary.Value;
                }
                else
                {
                    buffer2 = (byte[])this._coercedValue;
                }
                int num2       = buffer2.Length - parameter.Offset;
                int actualSize = parameter.GetActualSize();
                if (actualSize != 0)
                {
                    num2 = Math.Min(num2, actualSize);
                }
                if (OCI.DATATYPE.LONGVARRAW == ociType)
                {
                    buffer.WriteInt32(bufferOffset, num2);
                    bufferOffset += 4;
                    num           = num2 + 4;
                }
                else
                {
                    num = num2;
                }
                buffer.WriteBytes(bufferOffset, buffer2, parameter.Offset, num2);
                return(num);
            }

            case OCI.DATATYPE.CLOB:
            case OCI.DATATYPE.BLOB:
                if (!(value is OracleLob))
                {
                    throw System.Data.Common.ADP.BadBindValueType(value.GetType(), metaType.OracleType);
                }
                handleToBind = ((OracleLob)value).Descriptor;
                return(IntPtr.Size);

            case OCI.DATATYPE.BFILE:
                if (!(value is OracleBFile))
                {
                    throw System.Data.Common.ADP.BadBindValueType(value.GetType(), metaType.OracleType);
                }
                handleToBind = ((OracleBFile)value).Descriptor;
                return(IntPtr.Size);

            case OCI.DATATYPE.INT_TIMESTAMP:
            case OCI.DATATYPE.INT_TIMESTAMP_LTZ:
                if (value is OracleDateTime)
                {
                    OracleDateTime time = (OracleDateTime)value;
                    if (!time.HasTimeInfo)
                    {
                        throw System.Data.Common.ADP.UnsupportedOracleDateTimeBinding(metaType.OracleType);
                    }
                }
                this._dateTimeDescriptor = OracleDateTime.CreateDescriptor(ociType, connection, value);
                handleToBind             = this._dateTimeDescriptor;
                return(IntPtr.Size);

            case OCI.DATATYPE.INT_TIMESTAMP_TZ:
                if (value is OracleDateTime)
                {
                    OracleDateTime time2 = (OracleDateTime)value;
                    if (!time2.HasTimeZoneInfo)
                    {
                        throw System.Data.Common.ADP.UnsupportedOracleDateTimeBinding(OracleType.TimestampWithTZ);
                    }
                }
                this._dateTimeDescriptor = OracleDateTime.CreateDescriptor(ociType, connection, value);
                handleToBind             = this._dateTimeDescriptor;
                return(IntPtr.Size);

            case OCI.DATATYPE.INT_INTERVAL_YM:
                return(OracleMonthSpan.MarshalToNative(value, buffer, bufferOffset));

            case OCI.DATATYPE.INT_INTERVAL_DS:
                return(OracleTimeSpan.MarshalToNative(value, buffer, bufferOffset));
            }
            throw System.Data.Common.ADP.TypeNotSupported(ociType);
        }
コード例 #15
0
 internal MetaType GetMetaType(object value)
 {
     MetaType metaTypeForObject = this._metaType;
     if (metaTypeForObject == null)
     {
         if ((value != null) && !Convert.IsDBNull(value))
         {
             metaTypeForObject = MetaType.GetMetaTypeForObject(value);
         }
         else
         {
             metaTypeForObject = MetaType.GetDefaultMetaType();
         }
         this._metaType = metaTypeForObject;
     }
     return metaTypeForObject;
 }
コード例 #16
0
 public void ResetOracleType()
 {
     if (this._metaType != null)
     {
         this.PropertyTypeChanging();
         this._metaType = null;
     }
 }
コード例 #17
0
 internal static byte[] GetBytesFromBuffer(NativeBuffer buffer, int valueOffset, int lengthOffset, MetaType metaType, OracleConnection connection)
 {
     uint num2;
     OCI.DATATYPE ociType = metaType.OciType;
     short length = buffer.ReadInt16(lengthOffset);
     OCI.DATATYPE datatype = ociType;
     if (datatype == OCI.DATATYPE.DATE)
     {
         num2 = 7;
     }
     else if (datatype == OCI.DATATYPE.INT_TIMESTAMP)
     {
         num2 = 11;
     }
     else if (datatype == OCI.DATATYPE.INT_TIMESTAMP_LTZ)
     {
         num2 = 13;
     }
     else
     {
         num2 = 13;
     }
     byte[] destination = new byte[num2];
     buffer.ReadBytes(valueOffset, destination, 0, length);
     if (OCI.DATATYPE.INT_TIMESTAMP_LTZ == ociType)
     {
         TimeSpan serverTimeZoneAdjustmentToUTC = connection.ServerTimeZoneAdjustmentToUTC;
         destination[11] = (byte) (serverTimeZoneAdjustmentToUTC.Hours + 20);
         destination[12] = (byte) (serverTimeZoneAdjustmentToUTC.Minutes + 60);
         return destination;
     }
     if ((OCI.DATATYPE.INT_TIMESTAMP_TZ == ociType) && (0x80 < destination[11]))
     {
         sbyte num3;
         sbyte num4;
         OciIntervalDescriptor reftz = new OciIntervalDescriptor(connection.EnvironmentHandle);
         OciDateTimeDescriptor datetime = new OciDateTimeDescriptor(connection.EnvironmentHandle, OCI.HTYPE.OCI_DTYPE_TIMESTAMP_TZ);
         int rc = System.Data.Common.UnsafeNativeMethods.OCIDateTimeFromArray(connection.EnvironmentHandle, connection.ErrorHandle, destination, num2, 0xbc, datetime, reftz, 0);
         if (rc != 0)
         {
             connection.CheckError(connection.ErrorHandle, rc);
         }
         rc = System.Data.Common.UnsafeNativeMethods.OCIDateTimeGetTimeZoneOffset(connection.EnvironmentHandle, connection.ErrorHandle, datetime, out num4, out num3);
         if (rc != 0)
         {
             connection.CheckError(connection.ErrorHandle, rc);
         }
         destination[11] = (byte) (num4 + 20);
         destination[12] = (byte) (num3 + 60);
     }
     return destination;
 }
コード例 #18
0
 internal static int GetBytes(NativeBuffer buffer, int valueOffset, MetaType metaType, int sourceOffset, byte[] destinationBuffer, int destinationOffset, int byteCount)
 {
     if (!metaType.IsLong)
     {
         buffer.ReadBytes(valueOffset + sourceOffset, destinationBuffer, destinationOffset, byteCount);
         return byteCount;
     }
     NativeBuffer_LongColumnData.CopyOutOfLineBytes(buffer.ReadIntPtr(valueOffset), sourceOffset, destinationBuffer, destinationOffset, byteCount);
     return byteCount;
 }
コード例 #19
0
 internal static DateTime MarshalToDateTime(NativeBuffer buffer, int valueOffset, int lengthOffset, MetaType metaType, OracleConnection connection)
 {
     return ToDateTime(GetBytesFromBuffer(buffer, valueOffset, lengthOffset, metaType, connection));
 }
コード例 #20
0
 internal OracleBinary(NativeBuffer buffer, int valueOffset, int lengthOffset, MetaType metaType)
 {
     int byteCount = GetLength(buffer, lengthOffset, metaType);
     this._value = new byte[byteCount];
     GetBytes(buffer, valueOffset, metaType, 0, this._value, 0, byteCount);
 }
コード例 #21
0
 internal static DateTime MarshalTimestampToDateTime(OciDateTimeDescriptor dateTimeDescriptor, MetaType metaType, OracleConnection connection)
 {
     return ToDateTime(GetBytesFromDescriptor(dateTimeDescriptor, metaType, connection));
 }
コード例 #22
0
 internal static int GetLength(NativeBuffer buffer, int lengthOffset, MetaType metaType)
 {
     int num;
     if (metaType.IsLong)
     {
         num = buffer.ReadInt32(lengthOffset);
     }
     else
     {
         num = buffer.ReadInt16(lengthOffset);
     }
     GC.KeepAlive(buffer);
     return num;
 }
コード例 #23
0
 internal OracleDateTime(NativeBuffer buffer, int valueOffset, int lengthOffset, MetaType metaType, OracleConnection connection)
 {
     this._value = GetBytesFromBuffer(buffer, valueOffset, lengthOffset, metaType, connection);
 }
コード例 #24
0
 internal OracleString(NativeBuffer buffer, int valueOffset, int lengthOffset, MetaType metaType, OracleConnection connection, bool boundAsUCS2, bool outputParameterBinding)
 {
     this._value = MarshalToString(buffer, valueOffset, lengthOffset, metaType, connection, boundAsUCS2, outputParameterBinding);
 }
コード例 #25
0
 internal OracleDateTime(OciDateTimeDescriptor dateTimeDescriptor, MetaType metaType, OracleConnection connection)
 {
     this._value = GetBytesFromDescriptor(dateTimeDescriptor, metaType, connection);
 }
        internal int PutOracleValue(object value, NativeBuffer buffer, int bufferOffset, MetaType metaType, OracleConnection connection, ref SafeHandle handleToBind)
        {
            handleToBind = null;
            OCI.DATATYPE ociType = metaType.OciType;
            OracleParameter parameter = this.Parameter;
            switch (ociType)
            {
                case OCI.DATATYPE.VARCHAR2:
                case OCI.DATATYPE.LONG:
                case OCI.DATATYPE.LONGVARCHAR:
                case OCI.DATATYPE.CHAR:
                    return OracleString.MarshalToNative(value, parameter.Offset, parameter.GetActualSize(), buffer, bufferOffset, ociType, this._bindAsUCS2);

                case OCI.DATATYPE.INTEGER:
                case OCI.DATATYPE.FLOAT:
                case OCI.DATATYPE.UNSIGNEDINT:
                    buffer.StructureToPtr(bufferOffset, value);
                    return metaType.BindSize;

                case OCI.DATATYPE.VARNUM:
                    return OracleNumber.MarshalToNative(value, buffer, bufferOffset, connection);

                case OCI.DATATYPE.DATE:
                    return OracleDateTime.MarshalDateToNative(value, buffer, bufferOffset, ociType, connection);

                case OCI.DATATYPE.RAW:
                case OCI.DATATYPE.LONGRAW:
                case OCI.DATATYPE.LONGVARRAW:
                {
                    int num;
                    byte[] buffer2;
                    if (this._coercedValue is OracleBinary)
                    {
                        OracleBinary binary = (OracleBinary) this._coercedValue;
                        buffer2 = binary.Value;
                    }
                    else
                    {
                        buffer2 = (byte[]) this._coercedValue;
                    }
                    int num2 = buffer2.Length - parameter.Offset;
                    int actualSize = parameter.GetActualSize();
                    if (actualSize != 0)
                    {
                        num2 = Math.Min(num2, actualSize);
                    }
                    if (OCI.DATATYPE.LONGVARRAW == ociType)
                    {
                        buffer.WriteInt32(bufferOffset, num2);
                        bufferOffset += 4;
                        num = num2 + 4;
                    }
                    else
                    {
                        num = num2;
                    }
                    buffer.WriteBytes(bufferOffset, buffer2, parameter.Offset, num2);
                    return num;
                }
                case OCI.DATATYPE.CLOB:
                case OCI.DATATYPE.BLOB:
                    if (!(value is OracleLob))
                    {
                        throw System.Data.Common.ADP.BadBindValueType(value.GetType(), metaType.OracleType);
                    }
                    handleToBind = ((OracleLob) value).Descriptor;
                    return IntPtr.Size;

                case OCI.DATATYPE.BFILE:
                    if (!(value is OracleBFile))
                    {
                        throw System.Data.Common.ADP.BadBindValueType(value.GetType(), metaType.OracleType);
                    }
                    handleToBind = ((OracleBFile) value).Descriptor;
                    return IntPtr.Size;

                case OCI.DATATYPE.INT_TIMESTAMP:
                case OCI.DATATYPE.INT_TIMESTAMP_LTZ:
                    if (value is OracleDateTime)
                    {
                        OracleDateTime time = (OracleDateTime) value;
                        if (!time.HasTimeInfo)
                        {
                            throw System.Data.Common.ADP.UnsupportedOracleDateTimeBinding(metaType.OracleType);
                        }
                    }
                    this._dateTimeDescriptor = OracleDateTime.CreateDescriptor(ociType, connection, value);
                    handleToBind = this._dateTimeDescriptor;
                    return IntPtr.Size;

                case OCI.DATATYPE.INT_TIMESTAMP_TZ:
                    if (value is OracleDateTime)
                    {
                        OracleDateTime time2 = (OracleDateTime) value;
                        if (!time2.HasTimeZoneInfo)
                        {
                            throw System.Data.Common.ADP.UnsupportedOracleDateTimeBinding(OracleType.TimestampWithTZ);
                        }
                    }
                    this._dateTimeDescriptor = OracleDateTime.CreateDescriptor(ociType, connection, value);
                    handleToBind = this._dateTimeDescriptor;
                    return IntPtr.Size;

                case OCI.DATATYPE.INT_INTERVAL_YM:
                    return OracleMonthSpan.MarshalToNative(value, buffer, bufferOffset);

                case OCI.DATATYPE.INT_INTERVAL_DS:
                    return OracleTimeSpan.MarshalToNative(value, buffer, bufferOffset);
            }
            throw System.Data.Common.ADP.TypeNotSupported(ociType);
        }
コード例 #27
0
        internal bool Describe(ref int offset, OracleConnection connection, OciErrorHandle errorHandle)
        {
            byte  num;
            short num3;
            bool  flag  = false;
            bool  flag2 = false;

            this._describeHandle.GetAttribute(OCI.ATTR.OCI_ATTR_SQLCODE, out this._columnName, errorHandle, this._connection);
            this._describeHandle.GetAttribute(OCI.ATTR.OCI_ATTR_OBJECT, out num3, errorHandle);
            this._describeHandle.GetAttribute(OCI.ATTR.OCI_ATTR_SESSION, out num, errorHandle);
            this._isNullable = 0 != num;
            OCI.DATATYPE ociType = (OCI.DATATYPE)num3;
            switch (ociType)
            {
            case OCI.DATATYPE.VARCHAR2:
            case OCI.DATATYPE.CHAR:
            {
                int num2;
                this._describeHandle.GetAttribute(OCI.ATTR.OCI_ATTR_FNCODE, out this._byteSize, errorHandle);
                this._describeHandle.GetAttribute(OCI.ATTR.OCI_ATTR_CHARSET_FORM, out num, errorHandle);
                OCI.CHARSETFORM charsetform = (OCI.CHARSETFORM)num;
                this._bindAsUTF16 = connection.ServerVersionAtLeastOracle8;
                if (connection.ServerVersionAtLeastOracle9i && OCI.ClientVersionAtLeastOracle9i)
                {
                    this._describeHandle.GetAttribute(OCI.ATTR.OCI_ATTR_CHAR_SIZE, out num3, errorHandle);
                    num2 = num3;
                }
                else
                {
                    num2 = this._byteSize;
                }
                if (charsetform == OCI.CHARSETFORM.SQLCS_NCHAR)
                {
                    this._metaType = MetaType.GetMetaTypeForType((OCI.DATATYPE.CHAR == ociType) ? System.Data.OracleClient.OracleType.NChar : System.Data.OracleClient.OracleType.NVarChar);
                }
                else
                {
                    this._metaType = MetaType.GetMetaTypeForType((OCI.DATATYPE.CHAR == ociType) ? System.Data.OracleClient.OracleType.Char : System.Data.OracleClient.OracleType.VarChar);
                    if (this._bindAsUTF16)
                    {
                        this._byteSize *= System.Data.Common.ADP.CharSize;
                    }
                }
                this._byteSize = Math.Max(this._byteSize, num2 * System.Data.Common.ADP.CharSize);
                flag           = true;
                break;
            }

            case OCI.DATATYPE.NUMBER:
                this._metaType = MetaType.GetMetaTypeForType(System.Data.OracleClient.OracleType.Number);
                this._byteSize = this._metaType.BindSize;
                this._describeHandle.GetAttribute(OCI.ATTR.OCI_ATTR_ENV, out this._precision, errorHandle);
                this._describeHandle.GetAttribute(OCI.ATTR.OCI_ATTR_SERVER, out this._scale, errorHandle);
                break;

            case OCI.DATATYPE.LONG:
                this._metaType    = MetaType.GetMetaTypeForType(System.Data.OracleClient.OracleType.LongVarChar);
                this._byteSize    = this._metaType.BindSize;
                flag              = true;
                flag2             = true;
                this._bindAsUTF16 = connection.ServerVersionAtLeastOracle8;
                break;

            case OCI.DATATYPE.ROWID:
            case OCI.DATATYPE.ROWID_DESC:
            case OCI.DATATYPE.UROWID:
                this._metaType = MetaType.GetMetaTypeForType(System.Data.OracleClient.OracleType.RowId);
                this._byteSize = this._metaType.BindSize;
                if (connection.UnicodeEnabled)
                {
                    this._bindAsUTF16 = true;
                    this._byteSize   *= System.Data.Common.ADP.CharSize;
                }
                flag = true;
                break;

            case OCI.DATATYPE.DATE:
                this._metaType = MetaType.GetMetaTypeForType(System.Data.OracleClient.OracleType.DateTime);
                this._byteSize = this._metaType.BindSize;
                flag           = true;
                break;

            case OCI.DATATYPE.RAW:
                this._metaType = MetaType.GetMetaTypeForType(System.Data.OracleClient.OracleType.Raw);
                this._describeHandle.GetAttribute(OCI.ATTR.OCI_ATTR_FNCODE, out this._byteSize, errorHandle);
                flag = true;
                break;

            case OCI.DATATYPE.LONGRAW:
                this._metaType = MetaType.GetMetaTypeForType(System.Data.OracleClient.OracleType.LongRaw);
                this._byteSize = this._metaType.BindSize;
                flag           = true;
                flag2          = true;
                break;

            case OCI.DATATYPE.CLOB:
                this._describeHandle.GetAttribute(OCI.ATTR.OCI_ATTR_CHARSET_FORM, out num, errorHandle);
                this._metaType = MetaType.GetMetaTypeForType((2 == num) ? System.Data.OracleClient.OracleType.NClob : System.Data.OracleClient.OracleType.Clob);
                this._byteSize = this._metaType.BindSize;
                flag2          = true;
                break;

            case OCI.DATATYPE.BLOB:
                this._metaType = MetaType.GetMetaTypeForType(System.Data.OracleClient.OracleType.Blob);
                this._byteSize = this._metaType.BindSize;
                flag2          = true;
                break;

            case OCI.DATATYPE.BFILE:
                this._metaType = MetaType.GetMetaTypeForType(System.Data.OracleClient.OracleType.BFile);
                this._byteSize = this._metaType.BindSize;
                flag2          = true;
                break;

            case OCI.DATATYPE.TIMESTAMP:
                this._metaType = MetaType.GetMetaTypeForType(System.Data.OracleClient.OracleType.Timestamp);
                this._byteSize = this._metaType.BindSize;
                flag           = true;
                break;

            case OCI.DATATYPE.TIMESTAMP_TZ:
                this._metaType = MetaType.GetMetaTypeForType(System.Data.OracleClient.OracleType.TimestampWithTZ);
                this._byteSize = this._metaType.BindSize;
                flag           = true;
                break;

            case OCI.DATATYPE.INTERVAL_YM:
                this._metaType = MetaType.GetMetaTypeForType(System.Data.OracleClient.OracleType.IntervalYearToMonth);
                this._byteSize = this._metaType.BindSize;
                break;

            case OCI.DATATYPE.INTERVAL_DS:
                this._metaType = MetaType.GetMetaTypeForType(System.Data.OracleClient.OracleType.IntervalDayToSecond);
                this._byteSize = this._metaType.BindSize;
                break;

            case OCI.DATATYPE.TIMESTAMP_LTZ:
                this._metaType = MetaType.GetMetaTypeForType(System.Data.OracleClient.OracleType.TimestampLocal);
                this._byteSize = this._metaType.BindSize;
                flag           = true;
                break;

            default:
                throw System.Data.Common.ADP.TypeNotSupported(ociType);
            }
            if (this._isNullable)
            {
                this._indicatorOffset = offset;
                offset += IntPtr.Size;
            }
            else
            {
                this._indicatorOffset = -1;
            }
            if (flag)
            {
                this._lengthOffset = offset;
                offset            += IntPtr.Size;
            }
            else
            {
                this._lengthOffset = -1;
            }
            this._valueOffset = offset;
            if ((OCI.DATATYPE.LONG == ociType) || (OCI.DATATYPE.LONGRAW == ociType))
            {
                offset += IntPtr.Size;
            }
            else
            {
                offset += this._byteSize;
            }
            offset = (offset + (IntPtr.Size - 1)) & ~(IntPtr.Size - 1);
            OciHandle.SafeDispose(ref this._describeHandle);
            return(flag2);
        }