次の方法で共有


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 つのエンティティが関連付けられます。

  1. データベースでファイル システムのディレクトリを表す別名である、Oracle の DIRECTORY オブジェクト。
  2. DIRECTORY オブジェクトが表すディレクトリに配置されている、基になる物理ファイルの名前。

BFILE を作成した後、そのロケータを、 ExecuteReader メソッドまたは ExecuteScalar メソッドを使用して、 OracleBFile オブジェクトの形式で取得できます。

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

OracleBFile オブジェクトに関連付けられている物理ファイルは、そのファイルにアクセスするまで存在しなくてもかまいません。アプリケーションでは、存在しないファイルに OracleBFile をバインドしてから、指定した位置に物理ファイルを作成し、 Read を呼び出すことができます。

Read メソッドまたは Seek メソッドを使用して、閉じている OracleBFile にアクセスしようとすると、自動的に OracleBFile ストリームが再度開かれます。

Oracle テーブル内で BFILE を作成し、これを OracleBFile オブジェクトの形式で取得する C# のコード例を次に示します。ここでは、 OracleDataReader オブジェクト、および OracleBFileSeek メソッドと 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 内)

参照

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