internal long GetBytes(NativeBuffer_RowBuffer buffer, long fieldOffset, byte[] destinationBuffer, int destinationOffset, int length) { int num; if (length < 0) { throw System.Data.Common.ADP.InvalidDataLength((long)length); } if ((destinationOffset < 0) || ((destinationBuffer != null) && (destinationOffset >= destinationBuffer.Length))) { throw System.Data.Common.ADP.InvalidDestinationBufferIndex(destinationBuffer.Length, destinationOffset, "bufferoffset"); } if ((0L > fieldOffset) || (0xffffffffL < fieldOffset)) { throw System.Data.Common.ADP.InvalidSourceOffset("fieldOffset", 0L, 0xffffffffL); } if (this.IsLob) { System.Data.OracleClient.OracleType oracleType = this._metaType.OracleType; if ((System.Data.OracleClient.OracleType.Blob != oracleType) && (System.Data.OracleClient.OracleType.BFile != oracleType)) { throw System.Data.Common.ADP.InvalidCast(); } if (this.IsDBNull(buffer)) { throw System.Data.Common.ADP.DataReaderNoData(); } using (OracleLob lob = new OracleLob(this._lobLocator)) { uint num3 = (uint)lob.Length; uint num2 = (uint)fieldOffset; if (num2 > num3) { throw System.Data.Common.ADP.InvalidSourceBufferIndex((int)num3, (long)num2, "fieldOffset"); } num = (int)(num3 - num2); if (destinationBuffer != null) { num = Math.Min(num, length); if (0 < num) { lob.Seek((long)num2, SeekOrigin.Begin); lob.Read(destinationBuffer, destinationOffset, num); } } goto Label_0155; } } if ((System.Data.OracleClient.OracleType.Raw != this.OracleType) && (System.Data.OracleClient.OracleType.LongRaw != this.OracleType)) { throw System.Data.Common.ADP.InvalidCast(); } if (this.IsDBNull(buffer)) { throw System.Data.Common.ADP.DataReaderNoData(); } this.FixupLongValueLength(buffer); int num5 = OracleBinary.GetLength(buffer, this._lengthOffset, this._metaType); int sourceOffset = (int)fieldOffset; num = num5 - sourceOffset; if (destinationBuffer != null) { num = Math.Min(num, length); if (0 < num) { OracleBinary.GetBytes(buffer, this._valueOffset, this._metaType, sourceOffset, destinationBuffer, destinationOffset, num); } } Label_0155: return((long)Math.Max(0, num)); }