次の方法で共有


OracleLob クラス

メモ : この名前空間、クラス、およびメンバは、.NET Framework Version 1.1 だけでサポートされています。

Oracle サーバーに格納される、 LOB (Large Object Binary) データ型を表します。このクラスは継承できません。

この型のすべてのメンバの一覧については、OracleLob メンバ を参照してください。

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

NotInheritable Public Class OracleLob
   Inherits Stream
   Implements ICloneable, INullable
[C#]
public sealed class OracleLob : Stream, ICloneable, INullable
[C++]
public __gc __sealed class OracleLob : public Stream, ICloneable,
   INullable
[JScript]
public class OracleLob extends Stream implements ICloneable,
   INullable

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

OracleLob は、データが、オペレーティング システムの物理ファイルではなくサーバー上に格納されるという点で、 OracleBFile データ型とは異なります。また、常に読み取り専用である OracleBFile とは違って、読み書き可能オブジェクトです。

OracleLob は、次の OracleType データ型の 1 つです。

OracleType データ型 説明
Blob 最大 4 GB のバイナリ データを格納する Oracle の BLOB 型。 Byte 型の Array に割り当てられます。
Clob サーバーの既定の文字セットに基づいて、最大 4 GB の文字データを格納する Oracle の CLOB 型。 String に割り当てられます。
NClob サーバーの国別文字セットに基づいて、最大 4 GB のサイズの文字データを格納する Oracle の NCLOB データ型。 String に割り当てられます。

OracleLob オブジェクトを取得するには、 GetOracleLob メソッドを呼び出します。

この形式を使用して、NULL の OracleLob を構築できます。

OracleLob myLob = OracleLob.Null;

この手法は主に、この例が示すように、サーバーから返された LOB が NULL かどうかをテストするために使用します。

if( myLob == OracleLob.Null)

NULL の LOB は、0 バイトの LOB と同じように動作します。つまり、 Read は成功し、常に 0 バイトを返します。

null 値が格納されている LOB 列を選択すると、 Null が返されます。

一時 LOB を取得する前に、トランザクションを開始する必要があります。トランザクションが開始されていないと、 OracleDataReader は、後続データの取得に失敗する可能性があります。

DBMS_LOB.CREATETEMPORARY システム ストアド プロシージャを呼び出し、 LOB 出力パラメータをバインドすることによって、Oracle で一時 LOB を開くこともできます。クライアント側では、一時 LOB は、テーブル内の LOB と同様に動作します。たとえば、一時 LOB を更新するには、その LOB がトランザクション内に存在する必要があります。

一時 LOB を開く方法の C# の例を次に示します。

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

メモ   継承された WriteByte メソッドに文字データを指定して使用すると、このメソッドは失敗し、InvalidOperationException がスローされます。代わりに、 Write を使用してください。

必要条件

名前空間: System.Data.OracleClient

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

アセンブリ: System.Data.Oracleclient (System.Data.Oracleclient.dll 内)

参照

OracleLob メンバ | System.Data.OracleClient 名前空間