OracleLob 类

定义

表示存储在 Oracle 服务器上的大型对象二进制 (LOB) 数据类型。 此类不能被继承。

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

注解

OracleLob不同OracleBFile之处在于,数据存储在服务器上,而不是存储在作系统中的物理文件中。 它也可以是读写对象,与始终为只读的OracleBFile不同。

可以是以下数据类型中的 OracleLob 之一。

OracleType 数据类型 Description
Blob 一种 Oracle BLOB 数据类型,其中包含最大大小为 4 GB 的二进制数据(GB)。 这映射到一种 Array 类型 Byte
Clob 基于服务器上的默认字符集包含字符数据的 Oracle CLOB 数据类型,最大大小为 4 GB。 这映射到 String.
NClob 一种 Oracle NCLOB 数据类型,该数据类型包含字符数据,具体取决于服务器上最大大小为 4 GB 的国家字符集。 这映射到 String.

.NET应用程序开发人员可以将 Oracle LOB 值检索到基本.NET数据类型,例如类型 ArrayByte 或专用String数据类型的 OracleLob。 该 OracleLob 类支持从 Oracle 数据库中读取和写入 Oracle LOB 的数据。

以下是OracleLob数据类型的主要特征,它与基本.NET数据类型区分开来:

  • 将 Oracle 值从 Oracle LOB 数据库检索到 OracleLob 类中后,可以在打开的事务中更改 LOB 数据,并且所做的更改将直接反映在数据库中。 如果将 Oracle LOB 值检索到 Array 某种类型 ByteString 更新这些数组,则所做的更改不会反映在数据库中。

  • 使用 OracleLob 类访问某个值的区块 LOB 时,只有该区块从 Oracle 数据库传递到客户端。 使用 GetChars 该方法访问某个值的区块 LOB 时,该值的整个内容将从 Oracle 数据库传递到客户端。

若要获取对象 OracleLob ,请调用 GetOracleLob 该方法。

可以使用以下格式构造 OracleLob NULL:

OracleLob myLob = OracleLob.Null;
Dim myLob As OracleLob = OracleLob.Null

此方法主要用于测试从服务器返回的 LOB 值为 NULL,如以下示例所示:

if (myLob == OracleLob.Null)
If (myLob = OracleLob.Null) Then

NULL LOB 的行为类似于成功LOB且始终返回零字节的零Read字节。

LOB选择包含 null 值的列将Null返回 。

在获取临时 LOB事务之前,必须开始事务。 否则, OracleDataReader 以后可能无法获取数据。

还可以通过调用DBMS_LOB在 Oracle 中打开临时 LOB 文件。CREATETEMPORARY 系统存储过程和绑定 LOB 输出参数。 在客户端上,临时 LOB 行为类似于基于 LOB表的行为。 例如,若要更新临时, LOB它必须包含在事务中。

以下示例演示如何打开临时 LOB文件:

var connection = new OracleConnection("server=MyServer; integrated security=yes;");
connection.Open();
OracleTransaction transaction = connection.BeginTransaction();
OracleCommand command = connection.CreateCommand();
command.Transaction = transaction;
command.CommandText = "declare xx blob; begin dbms_lob.createtemporary(xx, false, 0); :tempblob := xx; end;";
command.Parameters.Add(new OracleParameter("tempblob", OracleType.Blob)).Direction = ParameterDirection.Output;
command.ExecuteNonQuery();
var tempLob = (OracleLob)command.Parameters[0].Value;
var tempbuff = new byte[10000];
tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
tempLob.Write(tempbuff,0,tempbuff.Length);
tempLob.EndBatch();
command.Parameters.Clear();
command.CommandText = "MyTable.MyProc";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new OracleParameter("ImportDoc", OracleType.Blob)).Value = tempLob;
command.ExecuteNonQuery();
transaction.Commit();
connection.Close();

注释

如果与字符数据一起使用,则继承 WriteByte 的方法将失败,并引发一个 InvalidOperationException 方法。 请改用该方法 Write

临时 LOBs 仅在连接关闭时关闭,但当池和负载不足时,临时 LOBs 不会关闭。 可以通过调用LOB释放临时tempLob.Dispose()来解决此问题。

字段

名称 说明
Null

表示 null OracleLob 对象。

属性

名称 说明
CanRead

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

CanSeek

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

CanTimeout

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

(继承自 Stream)
CanWrite

无论是否支持写入, LOB 始终返回 true。

ChunkSize

获取一个值,该值指示在读/写操作期间要从服务器检索或发送到服务器的最小字节数。

Connection

获取此 OracleConnection 实例 OracleLob使用的 。

IsBatched

获取一个值,该值指示应用程序是否调用该方法 BeginBatch()

IsNull

获取一个值,该值指示是否 OracleLobNull 流。

IsTemporary

获取一个值,该值 OracleLob 指示是否为临时 LOB值。

Length

获取一个值,该值返回大小 OracleLob

LobType

获取返回数据类型的值 LOB

Position

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

ReadTimeout

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

(继承自 Stream)
Value

获取与基础值等效的公共语言运行时流值。

WriteTimeout

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

(继承自 Stream)

方法

名称 说明
Append(OracleLob)

将数据从指定的 LOB 项追加到当前 LOB

BeginBatch()

防止服务器端触发器在执行多个读取操作时触发。

BeginBatch(OracleLobOpenMode)

防止服务器端触发器在指定的访问模式下执行多个读取和写入操作时触发。

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

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

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

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

(继承自 Stream)
Clone()

创建引用与原始OracleLob对象相同的 Oracle LOB 的新OracleLob对象。

Close()

关闭当前流并释放与流关联的资源。

Close()

关闭当前流并释放与当前流关联的任何资源(如套接字和文件句柄)。 请确保流已正确释放,而不是调用此方法。

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

从此 OracleLob 位置复制到具有指定数据量的目标 OracleLob ,以及源偏移量。

CopyTo(OracleLob, Int64)

从此 OracleLob 位置复制到具有指定数据量的目标 OracleLob

CopyTo(OracleLob)

从此 OracleLob 副本复制到目标 OracleLob

CopyTo(Stream, Int32)

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

(继承自 Stream)
CopyTo(Stream)

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

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

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

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

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

(继承自 Stream)
CopyToAsync(Stream)

从当前流异步读取字节并将其写入另一个流。 这两个流位置都是按复制的字节数进行高级的。

(继承自 Stream)
CreateObjRef(Type)

创建一个对象,其中包含生成用于与远程对象通信的代理所需的所有相关信息。

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

分配对象 WaitHandle

(继承自 Stream)
Dispose()

释放此对象使用的资源。

Dispose()

释放该 Stream命令使用的所有资源。

(继承自 Stream)
Dispose(Boolean)

释放由托管资源使用 Stream 的非托管资源,并选择性地释放托管资源。

(继承自 Stream)
EndBatch()

允许服务器端触发器在执行多个写入操作后恢复触发。

EndRead(IAsyncResult)

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

(继承自 Stream)
EndWrite(IAsyncResult)

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

(继承自 Stream)
Equals(Object)

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

(继承自 Object)
Erase()

清除此 OracleLob数据中的所有数据。

Erase(Int64, Int64)

清除此 OracleLob数据中的指定量。

Flush()

当前不支持。

FlushAsync()

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

(继承自 Stream)
FlushAsync(CancellationToken)

异步清除此流的所有缓冲区,导致任何缓冲数据写入基础设备,并监视取消请求。

(继承自 Stream)
GetHashCode()

用作默认哈希函数。

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

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

(继承自 MarshalByRefObject)
GetType()

获取当前实例的 Type

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

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

(继承自 MarshalByRefObject)
MemberwiseClone()

创建当前 Object的浅表副本。

(继承自 Object)
MemberwiseClone(Boolean)

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

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

提供对 a Contract.

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

从当前 OracleLob 流中读取字节序列,并通过读取的字节数推进流中的位置。

ReadAsync(Byte[], Int32, Int32, CancellationToken)

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

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

从当前流异步读取字节序列,并通过读取的字节数推进流中的位置。

(继承自 Stream)
ReadByte()

从流中读取字节,并将流中的位置向前推进一个字节,或者在流末尾返回 -1。

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

设置当前 OracleLob 流上的位置。

SetLength(Int64)

将流的长度 OracleLob 设置为小于当前长度的值。

ToString()

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

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

将字节序列写入当前 OracleLob 流,并通过写入的字节数推进此流中的当前位置。

WriteAsync(Byte[], Int32, Int32, CancellationToken)

将字节序列异步写入当前流,按写入的字节数推进此流中的当前位置,并监视取消请求。

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

以异步方式将字节序列写入当前流,并通过写入的字节数推进此流中的当前位置。

(继承自 Stream)
WriteByte(Byte)

将字节写入流中的 OracleLob 当前位置,并将流中的位置向前推进一个字节。

WriteByte(Byte)

将字节写入流中的当前位置,并将流中的位置向前推进一个字节。

(继承自 Stream)

显式接口实现

名称 说明
IDisposable.Dispose()

释放该 Stream命令使用的所有资源。

(继承自 Stream)

适用于