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 内)