OracleBFile クラス
メモ : この名前空間、クラス、およびメンバは、.NET Framework Version 1.1 だけでサポートされています。
Oracle の BFILE データ型で動作する、マネージ オブジェクト OracleBFile を表します。このクラスは継承できません。
この型のすべてのメンバの一覧については、OracleBFile メンバ を参照してください。
System.Object
System.MarshalByRefObject
System.IO.Stream
System.Data.OracleClient.OracleBFile
NotInheritable Public Class OracleBFile
Inherits Stream
Implements ICloneable, INullable
[C#]
public sealed class OracleBFile : Stream, ICloneable, INullable
[C++]
public __gc __sealed class OracleBFile : public Stream, ICloneable,
INullable
[JScript]
public class OracleBFile extends Stream implements ICloneable,
INullable
スレッドセーフ
この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。
解説
Oracle の BFILE データ型は、最大 4 ギガバイトのバイナリ データへの参照を格納する、Oracle の LOB データ型です。Oracle の BFILE は、データが、サーバーにではなくオペレーティング システムの物理ファイルに格納されるという点で、 LOB データ型とは異なります。 BFILE データ型が提供しているのは、データの読み取り専用アクセスです。そのため、 Stream クラスから継承された書き込み用のメソッドはサポートしていません。
BFILE データ型が LOB データ型と異なる点として、他に次に挙げたものがあります。
- 非構造化データを格納する。
- サーバー側チャンク処理をサポートしている。
- 参照コピーのセマンティクスを使用する。たとえば、 BFILE でコピー操作を実行すると、 BFILE ロケータ (ファイルへの参照) だけがコピーされます。ファイル内のデータは、コピーされません。
BFILE データ型は、サイズが大きいためにデータベースへの格納には向かない LOB の参照に使用します。 BFILE データ型を使用した場合、 LOB データ型を使用した場合と比べて、クライアント、サーバー、および通信のオーバーヘッドが発生します。サイズの小さいデータだけを取得する必要がある場合は、 BFILE にアクセスした方が効率的です。オブジェクト全体を取得する必要がある場合は、データベースに常駐する LOB にアクセスした方が効率的です。
NULL ではない各 OracleBFile オブジェクトには、基になる物理ファイルの位置を定義する、次の 2 つのエンティティが関連付けられます。
- データベースでファイル システムのディレクトリを表す別名である、Oracle の DIRECTORY オブジェクト。
- DIRECTORY オブジェクトが表すディレクトリに配置されている、基になる物理ファイルの名前。
BFILE を作成した後、そのロケータを、 ExecuteReader メソッドまたは ExecuteScalar メソッドを使用して、 OracleBFile オブジェクトの形式で取得できます。
OracleBFile オブジェクトを取得するには、 GetOracleBFile メソッドを呼び出します。
OracleBFile オブジェクトに関連付けられている物理ファイルは、そのファイルにアクセスするまで存在しなくてもかまいません。アプリケーションでは、存在しないファイルに OracleBFile をバインドしてから、指定した位置に物理ファイルを作成し、 Read を呼び出すことができます。
Read メソッドまたは Seek メソッドを使用して、閉じている OracleBFile にアクセスしようとすると、自動的に OracleBFile ストリームが再度開かれます。
Oracle テーブル内で BFILE を作成し、これを OracleBFile オブジェクトの形式で取得する C# のコード例を次に示します。ここでは、 OracleDataReader オブジェクト、および OracleBFile の Seek メソッドと Read メソッドを使用する例を示します。
using System;
using System.IO;
using System.Data;
using System.Data.OracleClient;
public class Sample
{
public static void Main(string[] args)
{
OracleConnection myConnection = new OracleConnection("Data Source=Oracle8i;Integrated Security=yes ");
myConnection.Open();
OracleCommand myCommand = myConnection.CreateCommand();
myCommand.CommandText = "create or replace directory MyDir as 'c:\\bfiles'";
myCommand.ExecuteNonQuery();
myCommand.CommandText = "create table MyTable(col1 number, col2 BFILE)";
myCommand.ExecuteNonQuery();
myCommand.CommandText = "insert into MyTable values ('2', BFILENAME('MYDIR', 'MyFile.jpg'))";
myCommand.ExecuteNonQuery();
myCommand.CommandText = "select * from MyTable";
byte[] buffer = new byte[100];
OracleDataReader myReader = myCommand.ExecuteReader();
using (myReader) {
if (myReader.Read()) {
OracleBFile myBFile = myReader.GetOracleBFile(1);
using (myBFile) {
myBFile.Seek(0, SeekOrigin.Begin);
myBFile.Read(buffer, 0, 100);
}
}
}
myConnection.Close();
}
}
Oracle の BFILE の作成と使用に関する詳細については、Oracle のドキュメントの該当するトピックを参照してください。
メモ BFILE データ型は読み取り専用であるため、 System.IO.Stream クラスから継承される BeginWrite メソッド、 EndWrite メソッド、および WriteByte メソッドは、サポートされません。
必要条件
名前空間: 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 内)