OracleLob 类

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

**命名空间:**System.Data.OracleClient
**程序集:**System.Data.OracleClient(在 system.data.oracleclient.dll 中)

语法

声明
Public NotInheritable Class OracleLob
    Inherits Stream
    Implements ICloneable, IDisposable, INullable
用法
Dim instance As OracleLob
public sealed class OracleLob : Stream, ICloneable, IDisposable, INullable
public ref class OracleLob sealed : public Stream, ICloneable, IDisposable, INullable
public final class OracleLob extends Stream implements ICloneable, IDisposable, 
    INullable
public final class OracleLob extends Stream implements ICloneable, IDisposable, 
    INullable

备注

OracleLobOracleBFile 的区别在于前者的数据存储在服务器上而不是存储在操作系统的物理文件中。它也可以是一个读写对象,这一点与 OracleBFile 不同(后者始终为只读)。

OracleLob 可以是这些 OracleType 数据类型之一:

OracleType 数据类型

说明

Blob

包含二进制数据的 Oracle BLOB 数据类型,其最大大小为 4 GB。它映射到 Byte 类型的 Array

Clob

包含字符数据的 Oracle CLOB 数据类型,根据服务器的默认字符集,其最大大小为 4 GB。它映射到 String

NClob

包含字符数据的 Oracle NCLOB 数据类型,根据服务器的区域字符集,其最大大小为 4 GB。它映射到 String

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

可以使用如下格式构造值为 NULL 的 OracleLob

OracleLob myLob = OracleLob.Null;

该技术主要用于测试从服务器返回的 LOB 是否为 NULL,如此示例所示:

If(myLob == OracleLob.Null)

NULL LOB 的行为与零字节 LOB 的相似之处在于,Read 成功并始终返回零字节。

选择一个包含空值的 LOB 列可返回 Null

必须在获取临时 LOB 之前开始事务。否则,OracleDataReader 将不能获取后面的数据。

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

下面的 C# 示例阐释如何打开一个临时 LOB。

OracleConnection 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();
OracleLob tempLob = (OracleLob)command.Parameters[0].Value;
byte[] 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();

提示

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

继承层次结构

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

线程安全

此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。

平台

Windows 98、Windows 2000 SP4、Windows Millennium Edition、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1

请参见

参考

OracleLob 成员
System.Data.OracleClient 命名空间