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一种数据类型。

OracleType 数据类型 说明
Blob 包含最大大小为 4 GB (GB) 的二进制数据的 Oracle BLOB 数据类型。 它映射到 Array 类型的 Byte
Clob 一种 Oracle CLOB 数据类型,包含基于服务器上默认字符集的字符数据,最大大小为 4 GB。 它映射到 String
NClob 包含字符数据的 Oracle NCLOB 数据类型,基于服务器上最大大小为 4 GB 的国家/地区字符集。 它映射到 String

.NET 应用程序开发人员可以将 Oracle LOB 值检索为基本 .NET 数据类型,例如 ArrayStringByte专用OracleLob数据类型。 类 OracleLob 支持在 Oracle LOB 数据库中读取和写入 Oracle 数据。

以下是数据类型与基本 .NET 数据类型的区别mainOracleLob特征:

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

  • 使用 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 的行为类似于 中Read成功且始终返回零字节的零字节LOB

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 方法。

临时 LOB仅在连接关闭时关闭,但在池和负载不足的情况下,临时 LOB不会关闭。 这可以通过释放临时 LOB,通过调用 tempLob.Dispose()来解决。

字段

Null

表示一个 null OracleLob 对象。

属性

CanRead

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

CanSeek

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

CanTimeout

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

(继承自 Stream)
CanWrite

不管 LOB 是否支持写入,始终返回真。

ChunkSize

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

Connection

获取由该 OracleConnection 实例使用的 OracleLob

IsBatched

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

IsNull

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

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 对象,该对象与原始 OracleLob 对象引用相同的 Oracle LOB

Close()

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

Close()

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

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

使用该源偏移量将指定数量的数据从该 OracleLob 复制到目标 OracleLob

CopyTo(OracleLob)

从该 OracleLob 复制到目标 OracleLob

CopyTo(OracleLob, Int64)

将指定数量的数据从该 OracleLob 复制到目标 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)
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()
已过时.

提供对 Contract 的支持。

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

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

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)

在当前 OracleLob 流上设置位置。

SetLength(Int64)

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

ToString()

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

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

将一个字节序列写入当前 OracleLob 流,并使流中的当前位置前进所写入的字节数。

Write(ReadOnlySpan<Byte>)

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

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

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

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

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

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

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

(继承自 Stream)
WriteByte(Byte)

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

WriteByte(Byte)

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

(继承自 Stream)

显式接口实现

IDisposable.Dispose()

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

(继承自 Stream)

适用于