OracleBFile 类

定义

表示托管 OracleBFile 对象,该对象的设计旨在与 Oracle BFILE 数据类型配合使用。 此类不能被继承。

public ref class OracleBFile sealed : System::IO::Stream, ICloneable, System::Data::SqlTypes::INullable
public sealed class OracleBFile : System.IO.Stream, ICloneable, System.Data.SqlTypes.INullable
type OracleBFile = class
    inherit Stream
    interface ICloneable
    interface IDisposable
    interface INullable
type OracleBFile = class
    inherit Stream
    interface ICloneable
    interface INullable
    interface IDisposable
Public NotInheritable Class OracleBFile
Inherits Stream
Implements ICloneable, INullable
继承
实现

注解

Oracle BFILE 数据类型是一种 Oracle LOB 数据类型,其中包含对二进制数据的引用,最大大小为 4 GB。 Oracle BFILE 与其他 Oracle LOB 数据类型的不同之处在于,其数据存储在操作系统中的物理文件中,而不是存储在服务器上。 请注意, BFILE 数据类型提供对数据的只读访问。 因此,不支持从 Stream 类继承的面向写入的方法。

将其与LOB数据类型区分开的数据类型的其他特征BFILE是:

  • 包含非结构化数据。

  • 支持服务器端分块。

  • 使用引用复制语义。 例如,如果在 上 BFILE执行复制操作,则仅 BFILE 复制定位符 (,它是对文件) 的引用。 而不会复制文件中的数据。

数据类型 BFILE 应该用于引用 LOB大号的 ,因此,在数据库中存储不切实际。 与数据类型相比LOB,使用BFILE数据类型会产生客户端、服务器和通信开销。 如果只需要获取少量数据, BFILE 则访问 会更高效。 如果需要获取整个对象,则访问数据库驻留 LOB的 会更高效。

每个非 NULL OracleBFile 对象都与定义基础物理文件位置的两个实体相关联:

  • 一个 Oracle DIRECTORY 对象,它是文件系统中一个目录的数据库别名,以及

  • 基础物理文件的文件名,它位于与 DIRECTORY 对象关联的目录中。

BFILE创建 后,可以使用 或 ExecuteScalar 方法以 对象ExecuteReader的形式OracleBFile检索其定位符。

若要获取 OracleBFile 对象,请 GetOracleBFile 调用 方法。

在尝试访问对象之前, OracleBFile 与对象关联的物理文件不需要存在。 应用程序可以将 绑定到 OracleBFile 不存在的文件,在预期位置创建物理文件,然后调用 Read

任何使用 ReadSeek 方法访问已关闭OracleBFile的 的尝试都会OracleBFile自动重新打开流。

下面的 C# 示例演示如何在 Oracle 表中创建 BFILE ,然后以 对象的形式 OracleBFile 检索它。 该示例演示如何使用 OracleDataReader 对象和 OracleBFileSeekRead 方法。

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;
}

有关创建和使用 Oracle BFILE的详细信息,请参阅 Oracle 文档中的相应主题。

注意

BeginWrite不支持从 System.IO.Stream 类继承的 、 EndWriteWriteByte 方法,因为BFILE数据类型是只读的。

字段

Null

表示空 OracleBFile 对象,该对象没有绑定到物理文件。

属性

CanRead

获取一个值,该值指示 BFILE 流是否可读。

CanSeek

获取一个值,该值指示能否执行向前和向后查找操作。

CanTimeout

获取一个值,该值确定当前流是否可以超时。

(继承自 Stream)
CanWrite

获取一个值,该值指示对象是否支持写入。

Connection

获取由该 OracleConnection 实例使用的 OracleBFile

DirectoryName

获取与 OracleBFile 对象相关联的 DIRECTORY 对象的名称。

FileExists

获取一个值,该值指示操作系统中是否存在包含 BFILE 数据的物理文件。

FileName

获取 BFILE 的名称(不带路径)。

IsNull

获取一个值,该值指示 OracleBFile 是否为一个 Null 流。

Length

获取一个值,该值返回与 OracleBFile 对象关联的物理文件的长度(以字节为单位)。

Position

获取 OracleBFile 流中的当前读取位置。

ReadTimeout

获取或设置一个值(以毫秒为单位),该值确定流在超时前将尝试读取的时间。

(继承自 Stream)
Value

获取 Array 类型的 Byte(它包含 OracleBFile 数据)。

WriteTimeout

获取或设置一个值(以毫秒为单位),该值确定流在超时前将尝试写入多长时间。

(继承自 Stream)

方法

BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

开始异步读操作。 (请考虑改用 ReadAsync(Byte[], Int32, Int32)。)

(继承自 Stream)
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

开始异步写操作。 (请考虑改用 WriteAsync(Byte[], Int32, Int32)。)

(继承自 Stream)
Clone()

创建此 OracleBFile 对象的副本,该副本所关联的物理文件与原始对象所关联的相同。

Close()

关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)。 不直接调用此方法,而应确保流得以正确释放。

(继承自 Stream)
CopyTo(Int64, OracleLob, Int64, Int64)

通过指定数据数量、源偏移量和目标偏移量,从此 OracleBFile 复制到目标 OracleLob

CopyTo(OracleLob)

将此 OracleBFile 的全部内容复制到目标 OracleLob 的开始位置。

CopyTo(OracleLob, Int64)

将此 OracleBFile 的全部内容复制到目标 OracleLob 中指定的偏移位置。

CopyTo(Stream)

从当前流中读取字节并将其写入到另一流中。 这两个流位置都以复制的字节数为高级。

(继承自 Stream)
CopyTo(Stream, Int32)

使用指定的缓冲区大小,从当前流中读取字节并将其写入到另一流中。 这两个流位置都以复制的字节数为高级。

(继承自 Stream)
CopyToAsync(Stream)

从当前流中异步读取字节并将其写入到另一个流中。 这两个流位置都以复制的字节数为高级。

(继承自 Stream)
CopyToAsync(Stream, CancellationToken)

通过指定的取消令牌,从当前流中异步读取字节并将其写入到另一个流中。 这两个流位置都以复制的字节数为高级。

(继承自 Stream)
CopyToAsync(Stream, Int32)

使用指定的缓冲区大小,从当前流中异步读取字节并将其写入到另一流中。 这两个流位置都以复制的字节数为高级。

(继承自 Stream)
CopyToAsync(Stream, Int32, CancellationToken)

使用指定的缓冲区大小和取消令牌,从当前流中异步读取字节并将其写入到另一个流中。 这两个流位置都以复制的字节数为高级。

(继承自 Stream)
CreateObjRef(Type)

创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。

(继承自 MarshalByRefObject)
CreateWaitHandle()
已过时.
已过时.
已过时.

分配 WaitHandle 对象。

(继承自 Stream)
Dispose()

释放此对象使用的所有资源。

Dispose()

释放由 Stream 使用的所有资源。

(继承自 Stream)
Dispose(Boolean)

释放由 Stream 占用的非托管资源,还可以另外再释放托管资源。

(继承自 Stream)
DisposeAsync()

异步释放 Stream 使用的非托管资源。

(继承自 Stream)
EndRead(IAsyncResult)

等待挂起的异步读取完成。 (请考虑改用 ReadAsync(Byte[], Int32, Int32)。)

(继承自 Stream)
EndWrite(IAsyncResult)

结束异步写操作。 (请考虑改用 WriteAsync(Byte[], Int32, Int32)。)

(继承自 Stream)
Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
Flush()

目前尚不支持。

FlushAsync()

异步清除此流的所有缓冲区并导致所有缓冲数据都写入基础设备中。

(继承自 Stream)
FlushAsync(CancellationToken)

异步清理此流的所有缓冲区,导致所有缓冲数据都写入基础设备,并且监控取消请求。

(继承自 Stream)
GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetLifetimeService()
已过时.

检索控制此实例的生存期策略的当前生存期服务对象。

(继承自 MarshalByRefObject)
GetType()

获取当前实例的 Type

(继承自 Object)
InitializeLifetimeService()
已过时.

获取生存期服务对象来控制此实例的生存期策略。

(继承自 MarshalByRefObject)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
MemberwiseClone(Boolean)

创建当前 MarshalByRefObject 对象的浅表副本。

(继承自 MarshalByRefObject)
ObjectInvariant()
已过时.

提供对 Contract 的支持。

(继承自 Stream)
Read(Byte[], Int32, Int32)

从当前 OracleBFile 流中读取字节序列,并在该流中按照读取的字节数提升位置。

Read(Span<Byte>)

当在派生类中重写时,从当前流读取字节序列,并将此流中的位置提升读取的字节数。

(继承自 Stream)
ReadAsync(Byte[], Int32, Int32)

从当前流异步读取字节序列,并将流中的位置提升读取的字节数。

(继承自 Stream)
ReadAsync(Byte[], Int32, Int32, CancellationToken)

从当前流异步读取字节的序列,将流中的位置提升读取的字节数,并监视取消请求。

(继承自 Stream)
ReadAsync(Memory<Byte>, CancellationToken)

从当前流异步读取字节的序列,将流中的位置提升读取的字节数,并监视取消请求。

(继承自 Stream)
ReadAtLeast(Span<Byte>, Int32, Boolean)

从当前流中至少读取最小字节数,并按读取的字节数提升流中的位置。

(继承自 Stream)
ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken)

从当前流异步读取至少最小字节数,将流中的位置按读取的字节数前进,并监视取消请求。

(继承自 Stream)
ReadByte()

从流中读取一个字节,并将流内的位置向前提升一个字节,或者如果已到达流结尾,则返回 -1。

(继承自 Stream)
ReadExactly(Byte[], Int32, Int32)

count从当前流中读取字节数,并提升流中的位置。

(继承自 Stream)
ReadExactly(Span<Byte>)

从当前流中读取字节,并推进流中的位置, buffer 直到 填充 。

(继承自 Stream)
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken)

从当前流异步读取 count 字节数,推进流中的位置,并监视取消请求。

(继承自 Stream)
ReadExactlyAsync(Memory<Byte>, CancellationToken)

从当前流异步读取字节,推进流中的位置,直到 buffer 填充,并监视取消请求。

(继承自 Stream)
Seek(Int64, SeekOrigin)

在当前 OracleBFile 流上设置位置。

SetFileName(String, String)

OracleBFile 对象绑定到操作系统中的其他文件。

SetLength(Int64)

当前不支持。

ToString()

返回表示当前对象的字符串。

(继承自 Object)
Write(Byte[], Int32, Int32)

当前不支持。

Write(ReadOnlySpan<Byte>)

当在派生类中重写时,向当前流中写入字节序列,并将此流中的当前位置提升写入的字节数。

(继承自 Stream)
WriteAsync(Byte[], Int32, Int32)

将字节序列异步写入当前流,并将流的当前位置提升写入的字节数。

(继承自 Stream)
WriteAsync(Byte[], Int32, Int32, CancellationToken)

将字节的序列异步写入当前流,将该流中的当前位置向前移动写入的字节数,并监视取消请求。

(继承自 Stream)
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

将字节的序列异步写入当前流,将该流中的当前位置向前移动写入的字节数,并监视取消请求。

(继承自 Stream)
WriteByte(Byte)

将一个字节写入流内的当前位置,并将流内的位置向前提升一个字节。

(继承自 Stream)

显式接口实现

IDisposable.Dispose()

释放由 Stream 使用的所有资源。

(继承自 Stream)

扩展方法

CopyToAsync(Stream, PipeWriter, CancellationToken)

使用取消令牌从 Stream 中异步读取字节并将其写入到指定的 PipeWriter

适用于