1 out of 1 rated this helpful - Rate this topic

OracleBFile Class

Represents a managed OracleBFile object designed to work with the Oracle BFILE data type. This class cannot be inherited.

System.Object
  System.MarshalByRefObject
    System.IO.Stream
      System.Data.OracleClient.OracleBFile

Namespace:  System.Data.OracleClient
Assembly:  System.Data.OracleClient (in System.Data.OracleClient.dll)
public sealed class OracleBFile : Stream, 
	ICloneable, INullable, IDisposable

The OracleBFile type exposes the following members.

  NameDescription
Public propertyCanReadGets a value indicating whether the BFILE stream can be read. (Overrides Stream.CanRead.)
Public propertyCanSeekGets a value indicating whether forward-seek and backward-seek operations can be performed. (Overrides Stream.CanSeek.)
Public propertyCanTimeoutGets a value that determines whether the current stream can time out. (Inherited from Stream.)
Public propertyCanWriteGets a value indicating whether the object supports writing. (Overrides Stream.CanWrite.)
Public propertyConnectionGets the OracleConnection used by this instance of the OracleBFile.
Public propertyDirectoryNameGets the name of the DIRECTORY object, with which an OracleBFile object is associated.
Public propertyFileExistsGets a value indicating whether a physical file containing BFILE data exists in the operating system.
Public propertyFileNameGets the name of the BFILE without the path.
Public propertyIsNullGets a value that indicates whether the OracleBFile is a Null stream.
Public propertyLengthGets a value that returns the length in bytes of the physical file with which the OracleBFile object is associated. (Overrides Stream.Length.)
Public propertyPositionGets the current read position in the OracleBFile stream. (Overrides Stream.Position.)
Public propertyReadTimeoutGets or sets a value, in miliseconds, that determines how long the stream will attempt to read before timing out. (Inherited from Stream.)
Public propertyValueGets an Array of type Byte that contains the OracleBFile data.
Public propertyWriteTimeoutGets or sets a value, in miliseconds, that determines how long the stream will attempt to write before timing out. (Inherited from Stream.)
Top
  NameDescription
Public methodBeginReadBegins an asynchronous read operation. (Consider using ReadAsync instead; see the Remarks section.) (Inherited from Stream.)
Public methodBeginWriteBegins an asynchronous write operation. (Consider using WriteAsync instead; see the Remarks section.) (Inherited from Stream.)
Public methodCloneCreates a copy of this OracleBFile object associated with the same physical file as the original.
Public methodCloseCloses the current stream and releases any resources (such as sockets and file handles) associated with the current stream. Instead of calling this method, ensure that the stream is properly disposed. (Inherited from Stream.)
Public methodCopyTo(OracleLob)Copies the entire contents of this OracleBFile to the beginning of a destination OracleLob.
Public methodCopyTo(Stream)Reads the bytes from the current stream and writes them to another stream. (Inherited from Stream.)
Public methodCopyTo(OracleLob, Int64)Copies the entire contents of this OracleBFile to a destination OracleLob at the specified offset.
Public methodCopyTo(Stream, Int32)Reads the bytes from the current stream and writes them to another stream, using a specified buffer size. (Inherited from Stream.)
Public methodCopyTo(Int64, OracleLob, Int64, Int64)Copies from this OracleBFile to a destination OracleLob with the specified amount of data, the source offset, and the destination offset.
Public methodCopyToAsync(Stream)Asynchronously reads the bytes from the current stream and writes them to another stream. (Inherited from Stream.)
Public methodCopyToAsync(Stream, Int32)Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size. (Inherited from Stream.)
Public methodCopyToAsync(Stream, Int32, CancellationToken)Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size and cancellation token. (Inherited from Stream.)
Public methodCreateObjRefCreates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object. (Inherited from MarshalByRefObject.)
Public methodDispose()Releases all resources used by the Stream. (Inherited from Stream.)
Public methodEndReadWaits for the pending asynchronous read to complete. (Consider using ReadAsync instead; see the Remarks section.) (Inherited from Stream.)
Public methodEndWriteEnds an asynchronous write operation. (Consider using WriteAsync instead; see the Remarks section.) (Inherited from Stream.)
Public methodEquals(Object)Determines whether the specified object is equal to the current object. (Inherited from Object.)
Public methodFlushNot currently supported. (Overrides Stream.Flush().)
Public methodFlushAsync()Asynchronously clears all buffers for this stream and causes any buffered data to be written to the underlying device. (Inherited from Stream.)
Public methodFlushAsync(CancellationToken)Asynchronously clears all buffers for this stream, causes any buffered data to be written to the underlying device, and monitors cancellation requests. (Inherited from Stream.)
Public methodGetHashCodeServes as the default hash function. (Inherited from Object.)
Public methodGetLifetimeServiceRetrieves the current lifetime service object that controls the lifetime policy for this instance. (Inherited from MarshalByRefObject.)
Public methodGetTypeGets the Type of the current instance. (Inherited from Object.)
Public methodInitializeLifetimeServiceObtains a lifetime service object to control the lifetime policy for this instance. (Inherited from MarshalByRefObject.)
Public methodReadReads a sequence of bytes from the current OracleBFile stream and advances the position within the stream by the number of bytes read. (Overrides Stream.Read(Byte[], Int32, Int32).)
Public methodReadAsync(Byte[], Int32, Int32)Asynchronously reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. (Inherited from Stream.)
Public methodReadAsync(Byte[], Int32, Int32, CancellationToken)Asynchronously reads a sequence of bytes from the current stream, advances the position within the stream by the number of bytes read, and monitors cancellation requests. (Inherited from Stream.)
Public methodReadByteReads a byte from the stream and advances the position within the stream by one byte, or returns -1 if at the end of the stream. (Inherited from Stream.)
Public methodSeekSets the position on the current OracleBFile stream. (Overrides Stream.Seek(Int64, SeekOrigin).)
Public methodSetFileNameBinds the OracleBFile object to a different file in the operating system.
Public methodSetLengthNot currently supported. (Overrides Stream.SetLength(Int64).)
Public methodToStringReturns a string that represents the current object. (Inherited from Object.)
Public methodWriteNot currently supported. (Overrides Stream.Write(Byte[], Int32, Int32).)
Public methodWriteAsync(Byte[], Int32, Int32)Asynchronously writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. (Inherited from Stream.)
Public methodWriteAsync(Byte[], Int32, Int32, CancellationToken)Asynchronously writes a sequence of bytes to the current stream, advances the current position within this stream by the number of bytes written, and monitors cancellation requests. (Inherited from Stream.)
Public methodWriteByteWrites a byte to the current position in the stream and advances the position within the stream by one byte. (Inherited from Stream.)
Top
  NameDescription
Public fieldStatic memberNullRepresents a null OracleBFile object that is not bound to a physical file.
Top

The Oracle BFILE data type is an Oracle LOB data type that contains a reference to binary data with a maximum size of 4 gigabytes. An Oracle BFILE differs from other Oracle LOB data types in that its data is stored in a physical file in the operating system instead of on the server. Note that the BFILE data type provides read-only access to data. Therefore, write-oriented methods inherited from the Stream class are not supported.

Other characteristics of a BFILE data type that distinguish it from a LOB data type are that it:

  • Contains unstructured data.

  • Supports server-side chunking.

  • Uses reference copy semantics. For example, if you perform a copy operation on a BFILE, only the BFILE locator (which is a reference to the file) is copied. The data in the file is not copied.

The BFILE data type should be used for referencing LOBs that are large in size, and therefore, not practical to store in the database. There is client, server, and communication overhead for using a BFILE data type compared to the LOB data type. It is more efficient to access a BFILE if you only need to obtain a small amount of data. It is more efficient to access database-resident LOBs if you need to obtain the entire object.

Each non-NULL OracleBFile object is associated with two entities that define the location of the underlying physical file:

  • An Oracle DIRECTORY object, which is a database alias for a directory in the file system, and

  • The file name of the underlying physical file, which is located in the directory associated with the DIRECTORY object.

After a BFILE is created, you can retrieve its locator in the form of an OracleBFile object using the ExecuteReader or ExecuteScalar methods.

To obtain an OracleBFile object, call the GetOracleBFile method.

The physical file that an OracleBFile object is associated with does not need to exist until you attempt to access it. An application can bind an OracleBFile to a nonexistent file, create the physical file in the expected location, and then call Read.

Any attempt to access a closed OracleBFile using the Read or Seek methods reopens an OracleBFile stream automatically.

The following C# example demonstrates how you can create a BFILE in an Oracle table, and then retrieve it in the form of an OracleBFile object. The example demonstrates the use of the OracleDataReader object and the OracleBFile Seek and Read methods.

		private void GetOracleBFile(string connectionString)
		{
			//Create and open the connection. 
			using (OracleConnection connection = new OracleConnection(connectionString))
			{
				connection.Open();

				//Create and execute the commands.
				OracleCommand command = connection.CreateCommand();
				command.CommandText = "CREATE OR REPLACE DIRECTORY TestDir AS 'c:\\bfiles'";
				command.ExecuteNonQuery();
				command.CommandText = "CREATE TABLE TestTable(col1 number, col2 BFILE)";
				command.ExecuteNonQuery();
				command.CommandText = "INSERT INTO TestTable VALUES ('2', BFILENAME('TESTDIR', 'File.jpg'))";
				command.ExecuteNonQuery();
				command.CommandText = "SELECT * FROM TestTable";

				//Read the BFile data. 
				byte[] buffer = new byte[100];
				OracleDataReader dataReader = command.ExecuteReader();
				using (dataReader)
				{
					if (dataReader.Read())
					{
						OracleBFile BFile = dataReader.GetOracleBFile(1);
						using (BFile)
						{
							BFile.Seek(0, SeekOrigin.Begin);
							BFile.Read(buffer, 0, 100);
						}
					}
				}
			}
			return;
		}

For more information about creating and using an Oracle BFILE, see the appropriate topic in your Oracle documentation.

NoteNote

The BeginWrite, EndWrite, and WriteByte methods, which are inherited from the System.IO.Stream class, are not supported because the BFILE data type is read-only.

.NET Framework

Supported in: 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft. All rights reserved.