private OracleLob CreateTemporaryLobForValue(OracleConnection connection, OracleType oracleType, object value)
        {
            switch (oracleType)
            {
            case OracleType.BFile:
                oracleType = OracleType.Blob;
                break;

            case OracleType.Blob:
            case OracleType.Clob:
            case OracleType.NClob:
                break;

            default:
                throw System.Data.Common.ADP.InvalidLobType(oracleType);
            }
            OracleLob stream = new OracleLob(connection, oracleType);

            byte[] buffer = value as byte[];
            if (buffer != null)
            {
                stream.Write(buffer, 0, buffer.Length);
                return(stream);
            }
            Encoding encoding = new UnicodeEncoding(false, false);

            stream.Seek(0L, SeekOrigin.Begin);
            StreamWriter writer = new StreamWriter(stream, encoding);

            writer.Write(value);
            writer.Flush();
            return(stream);
        }
Exemplo n.º 2
0
        /// <include file='doc\OracleBFile.uex' path='docs/doc[@for="OraOracleBFilecleLob.Seek"]/*' />
        public override long Seek(
            long offset,
            SeekOrigin origin
            )
        {
            AssertInternalLobIsValid();
            long result = _lob.Seek(offset, origin);

            return(result);
        }
        private OracleLob CreateTemporaryLobForValue(OracleConnection connection, OracleType oracleType, object value)
        {
            switch (oracleType)
            {
                case OracleType.BFile:
                    oracleType = OracleType.Blob;
                    break;

                case OracleType.Blob:
                case OracleType.Clob:
                case OracleType.NClob:
                    break;

                default:
                    throw System.Data.Common.ADP.InvalidLobType(oracleType);
            }
            OracleLob stream = new OracleLob(connection, oracleType);
            byte[] buffer = value as byte[];
            if (buffer != null)
            {
                stream.Write(buffer, 0, buffer.Length);
                return stream;
            }
            Encoding encoding = new UnicodeEncoding(false, false);
            stream.Seek(0L, SeekOrigin.Begin);
            StreamWriter writer = new StreamWriter(stream, encoding);
            writer.Write(value);
            writer.Flush();
            return stream;
        }
Exemplo n.º 4
0
 void TrySeek(OracleLob lob, long offset, SeekOrigin start, long expected, int id)
 {
         try {
                 lob.Seek (offset, start);
                 Assert.AreEqual (expected, lob.Position, "Lob position was unexpected [" + id + ']');
         }
         catch (ArgumentOutOfRangeException) {
                 Assert.Fail ("Unable to perform a legal seek [" + id + ']');
         }
 }
Exemplo n.º 5
0
        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));
        }