ヘッダーをスキップ
Oracle Data Provider for .NET開発者ガイド
11g リリース1(11.1)
E05791-01
  目次へ
目次
索引へ
索引

戻る
戻る
 
次へ
次へ
 

OracleBFileクラス

OracleBFileは、BFILEデータへの参照が含まれるオブジェクトです。このオブジェクトは、BFILEに対して操作を実行するためのメソッドを提供します。


注意:

OracleBFileは、Oracle8.x以降に対して実行されるアプリケーションでサポートされています。

クラスの継承

System.Object

  System.MarshalByRefObject

    System.IO.Stream

             Oracle.DataAccess.Types.OracleBFile

宣言

// C#
public sealed class OracleBFile : Stream, ICloneable, INullable

スレッド安全性

パブリック静的メソッドはスレッドセーフですが、インスタンス・メソッドではスレッド安全性は保証されません。

備考

OracleBFileは、Oracle8.x以降に対して実行されるアプリケーションでサポートされています。

// Database Setup, if you have not done so yet.
/* Log on as DBA (SYS or SYSTEM) that has CREATE ANY DIRECTORY privilege.

CREATE OR REPLACE DIRECTORY MYDIR AS 'C:\TEMP';

*/

// C#

using System;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;

class OracleBFileSample
{
static void Main()
{
    // Create MYDIR directory object as indicated previously and create a file
    // MyFile.txt with the text ABCDABC under C:\TEMP directory.
    // Note that the byte representation of the ABCDABC is 65666768656667

    string constr = "User Id=scott;Password=tiger;Data Source=oracle";
    OracleConnection con = new OracleConnection(constr);
    con.Open();

    OracleBFile bFile = new OracleBFile(con, "MYDIR", "MyFile.txt");

    // Open the OracleBFile
    bFile.OpenFile();

    // Read 7 bytes into readBuffer, starting at buffer offset 0
    byte[] readBuffer = new byte[7];
    int bytesRead = bFile.Read(readBuffer, 0, 7);

    // Prints "bytesRead  = 7"
    Console.WriteLine("bytesRead  = " + bytesRead);

    // Prints "readBuffer = 65666768656667"
    Console.Write("readBuffer = ");
    for(int index = 0; index <  readBuffer.Length; index++)
    {
      Console.Write(readBuffer[index]);
    }
    Console.WriteLine();

    // Search for the 2nd occurrence of a byte pattern {66,67}
    // starting from byte offset 1 in the OracleBFile
    byte[] pattern = new byte[2] {66, 67};
    long posFound = bFile.Search(pattern, 1, 2);

    // Prints "posFound   = 6"
    Console.WriteLine("posFound   = " + posFound);

    // Close the OracleBFile
    bFile.CloseFile();

    bFile.Close();
    bFile.Dispose();

    con.Close();
    con.Dispose();
}
}

要件

ネームスペース: Oracle.DataAccess.Types

アセンブリ: Oracle.DataAccess.dll

Microsoft .NET Frameworkバージョン: 1.xまたは2.0


OracleBFileメンバー

OracleBFileメンバーは次の表にリスト表示されています。

OracleBFileコンストラクタ

OracleBFileコンストラクタのリストを、表11-1に示します。

表11-1 OracleBFileコンストラクタ

コンストラクタ 説明

OracleBFileコンストラクタ


OracleBFileクラスのインスタンスを作成します(オーバーロード)


OracleBFile静的フィールド

OracleBFile静的フィールドのリストを、表11-2に示します。

表11-2 OracleBFile静的フィールド

フィールド 説明

MaxSize


静的フィールドはBFILEが保持できる最大バイト数、4,294,967,295(2^32 - 1)バイトを保持します

Null


OracleBFileインスタンスの値に割り当てることができるNULL値を表します


OracleBFile静的メソッド

OracleBFile静的メソッドのリストを、表11-3に示します。

表11-3 OracleBFile静的メソッド

メソッド 説明

Equals

System.Objectからの継承(オーバーロード)


OracleBFileインスタンス・プロパティ

OracleBFileインスタンスのプロパティを、表11-4に示します。

表11-4 OracleBFileインスタンス・プロパティ

プロパティ 説明

CanRead

LOBストリームが読取り可能かどうかを示します

CanSeek

順方向および逆方向検索操作が実行可能かどうかを示します

CanWrite


LOBオブジェクトが書込みをサポートしているかどうかを示します

Connection


BFILEからの読取りに使用する接続を示します

DirectoryName


BFILEのディレクトリの別名を示します

FileExists


指定されたBFILEが存在するかどうかを示します

FileName


BFILEの名前を示します

IsEmpty


BFILEが空かどうかを示します

IsNull


現行インスタンスにNULL値があるかどうかを示します

IsOpen


BFILEがこのインスタンスによってオープンされているかどうかを示します

Length


BFILEデータのサイズをバイト数で示します

Position


LOBストリームの現行の読取り位置を示します

Value


データをBFILEの最初のバイトから開始するバイト配列として戻します


OracleBFileインスタンス・メソッド

OracleBFileインスタンス・メソッドのリストを、表11-5に示します。

表11-5 OracleBFileインスタンス・メソッド

メソッド 説明

BeginRead

System.IO.Streamからの継承

BeginWrite

サポート対象外

Clone


OracleBFileオブジェクトのコピーを作成します

Close


現行のストリームをクローズし、ストリームに関連するすべてのリソースを解除します

CloseFile


現行のBFILEインスタンスが参照するBFILEをクローズします

Compare


2つのOracleBFileが参照するデータを比較します

CreateObjRef

System.MarshalByRefObjectからの継承

CopyTo


指定どおりにデータをコピーします(オーバーロード)

Dispose


このオブジェクトによって割り当てられたリソースを解除します

EndRead

System.IO.Streamからの継承

EndWrite

サポート対象外

Equals

System.Objectからの継承(オーバーロード)

Flush

サポート対象外

GetHashCode

System.Objectからの継承

GetLifetimeService

System.MarshalByRefObjectからの継承

GetType

System.Objectからの継承

InitializeLifetimeService

System.MarshalByRefObjectからの継承

IsEqual


LOB参照を比較します

OpenFile


FileNameおよびDirectoryNameによって指定されたBFILEをオープンします

Read


OracleBFileインスタンスから指定バイト数を読み取り、bufferに移入します

ReadByte

System.IO.Streamからの継承

Search


OracleBFileの現行インスタンスのバイナリ・パターンを検索します

Seek


現行のLOBストリームに位置を設定します

SetLength

サポート対象外

ToString

System.Objectからの継承

Write

サポート対象外

WriteByte

サポート対象外



OracleBFileコンストラクタ

OracleBFileコンストラクタでは、OracleBFileクラスの新規インスタンスを作成します。

オーバーロード・リスト:

OracleBFile(OracleConnection)

このコンストラクタでは、OracleBFileクラスのインスタンスをOracleConnectionオブジェクトとともに作成します。

宣言

// C#
public OracleBFile(OracleConnection con);

パラメータ

例外

InvalidOperationException: OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。

備考

接続は、アプリケーションによって明示的にオープンされる必要があります。OracleBFileでは接続を暗黙的にオープンしません。

OracleBFile(OracleConnection, string, string)

このコンストラクタでは、OracleConnectionオブジェクト付きOracleBFileクラスのインスタンス、BFILEの位置およびBFILEの名前を作成します。

宣言

// C#
public OracleBFile(OracleConnection con, string directoryName, string
   fileName);

パラメータ

例外

InvalidOperationException: OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。

備考

OracleConnectionは、アプリケーションによって明示的にオープンされる必要があります。OracleBFileでは接続を暗黙的にオープンしません。

OracleBFileインスタンスを使用してBFILE列をSQL INSERT文の入力パラメータとして初期化するには、directoryNameおよびfileNameを正しく設定する必要があります。


OracleBFile静的フィールド

OracleBFile静的フィールドのリストを、表11-6に示します。

表11-6 OracleBFile静的フィールド

フィールド 説明

MaxSize


静的フィールドはBFILEが保持できる最大バイト数、4,294,967,295(2^32 - 1)バイトを保持します

Null


OracleBFileインスタンスの値に割り当てることができるNULL値を表します


MaxSize

この静的フィールドはBFILEが保持できる最大バイト数、4,294,967,295(2^32 - 1)バイトを保持します。

宣言

// C#
public static readonly Int64 MaxSize = 4294967295;

備考

このフィールドは操作が許容最大長を超えているかどうかをチェックするコードに便利です。

Null

この静的フィールドは、OracleBFileインスタンスの値に割り当てることができるNULL値を表します。

宣言

// C#
public static readonly OracleBFile Null;


OracleBFile静的メソッド

OracleBFile静的メソッドのリストを、表11-7に示します。

表11-7 OracleBFile静的メソッド

メソッド 説明

Equals

System.Objectからの継承(オーバーロード)



OracleBFileインスタンス・プロパティ

OracleBFileインスタンスのプロパティを、表11-8に示します。

表11-8 OracleBFileインスタンス・プロパティ

プロパティ 説明

CanRead

LOBストリームが読取り可能かどうかを示します

CanSeek

順方向および逆方向検索操作が実行可能かどうかを示します

CanWrite


LOBオブジェクトが書込みをサポートしているかどうかを示します

Connection


BFILEからの読取りに使用する接続を示します

DirectoryName


BFILEのディレクトリの別名を示します

FileExists


指定されたBFILEが存在するかどうかを示します

FileName


BFILEの名前を示します

IsEmpty


BFILEが空かどうかを示します

IsNull


現行インスタンスにNULL値があるかどうかを示します

IsOpen


BFILEがこのインスタンスによってオープンされているかどうかを示します

Length


BFILEデータのサイズをバイト数で示します

Position


LOBストリームの現行の読取り位置を示します

Value


データをBFILEの最初のバイトから開始するバイト配列として戻します


CanRead

Streamをオーバーライドします。

このインスタンス・プロパティではLOBストリームが読取り可能かどうかを示します。

宣言

// C#
public override bool CanRead{get;}

プロパティ値

LOBストリームが読取り可能の場合はtrueを戻し、それ以外の場合はfalseを戻します。

CanSeek

Streamをオーバーライドします。

このインスタンス・プロパティでは、順方向および逆方向シーク操作が実行可能かどうかを示します。

宣言

// C#
public override bool CanSeek{get;}

プロパティ値

順方向および逆方向シーク操作が実行可能の場合はtrueを戻し、それ以外の場合はfalseを戻します。

CanWrite

Streamをオーバーライドします。

このインスタンス・プロパティでは、LOBオブジェクトが書込みをサポートしているかどうかを示します。

宣言

// C#
public override bool CanWrite{get;}

プロパティ値

BFILEは読取り専用

備考

BFILEは読取り専用であるため、ブール値は常にfalseです。

Connection

このインスタンス・プロパティでは、BFILEからの読取りに使用する接続を示します。

宣言

// C#
public OracleConnection Connection {get;}

プロパティ値

OracleConnectionのオブジェクト

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

DirectoryName

このインスタンス・プロパティでは、BFILEのディレクトリの別名を示します。

宣言

// C#
public string DirectoryName {get;set;}

プロパティ値

string

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

InvalidOperationException: BFILEがオープンされているときに変更されたDirectoryNameの値。

備考

DirectoryNameの最大長は30バイトです。

FileExists

このインスタンス・プロパティでは、DirectoryNameおよびFileNameによって指定されたBFILEが存在するかどうかを示します。

宣言

// C#
public bool FileExists {get;}

プロパティ値

bool

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

InvalidOperationException: OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。

備考

接続、ファイル名およびディレクトリ名が指定されていない場合は、このプロパティはデフォルトでfalseに設定されます。

FileName

このインスタンス・プロパティでは、BFILEの名前を示します。

宣言

// C#
public string FileName {get;set}

プロパティ値

BFILE名を含むstring

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

InvalidOperationException: BFILEがオープンされているときに変更されたDirectoryNameの値。

備考

FileNameの最大長は255バイトです。

BFILEオブジェクトがオープンされているときにFileNameプロパティを変更すると例外が発生します。

IsEmpty

このインスタンス・プロパティでは、BFILEが空かどうかを示します。

宣言

// C#
public bool IsEmpty {get;}

プロパティ値

bool

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

IsNull

このプロパティは現行インスタンスにNULL値があるかどうかを示します。

宣言

// C#
public bool IsNull{get;}

プロパティ値

現行インスタンスにNULL値がある場合はtrue、それ以外の場合はfalseを戻します。

IsOpen

このインスタンス・プロパティでは、BFILEがこのインスタンスによってオープンされているかどうかを示します。

宣言

// C#
public bool IsOpen {get;}

プロパティ値

bool

Length

Streamをオーバーライドします。

このインスタンス・プロパティでは、BFILEデータのサイズをバイト数で示します。

宣言

// C#
public override Int64 Length {get;}

プロパティ値

Int64

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

InvalidOperationException: OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。

Position

Streamをオーバーライドします。

このインスタンスではLOBストリームの現行の読取り位置を示します。

宣言

// C#
public override Int64 Position{get; set;}

プロパティ値

読取り位置を示すInt64

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

InvalidOperationException: OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。

ArgumentOutOfRangeException: 値は0未満です。

Value

このインスタンス・プロパティでは、データをBFILEの最初のバイトを起点とするバイト配列として戻します。

宣言

// C#
public byte[] Value{get;}

プロパティ値

バイト配列

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

InvalidOperationException: OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。

備考

データ長はバイト配列の最大長によって制限されています。Positionプロパティの現行値は使用または変更されません。


OracleBFileインスタンス・メソッド

OracleBFileインスタンス・メソッドのリストを、表11-9に示します。

表11-9 OracleBFileインスタンス・メソッド

メソッド 説明

BeginRead

System.IO.Streamからの継承

BeginWrite

サポート対象外

Clone


OracleBFileオブジェクトのコピーを作成します

Close


現行のストリームをクローズし、ストリームに関連するすべてのリソースを解除します

CloseFile


現行のBFILEインスタンスが参照するBFILEをクローズします

Compare


2つのOracleBFileが参照するデータを比較します

CreateObjRef

System.MarshalByRefObjectからの継承

CopyTo


指定どおりにデータをコピーします(オーバーロード)

Dispose


このオブジェクトによって割り当てられたリソースを解除します

EndRead

System.IO.Streamからの継承

EndWrite

サポート対象外

Equals

System.Objectからの継承(オーバーロード)

Flush

サポート対象外

GetHashCode

System.Objectからの継承

GetLifetimeService

System.MarshalByRefObjectからの継承

GetType

System.Objectからの継承

InitializeLifetimeService

System.MarshalByRefObjectからの継承

IsEqual


LOB参照を比較します

OpenFile


FileNameおよびDirectoryNameによって指定されたBFILEをオープンします

Read


OracleBFileインスタンスから指定バイト数を読み取り、bufferに移入します

ReadByte

System.IO.Streamからの継承

Search


OracleBFileの現行インスタンスのバイナリ・パターンを検索します

Seek


現行のLOBストリームに位置を設定します

SetLength

サポート対象外

ToString

System.Objectからの継承

Write

サポート対象外

WriteByte

サポート対象外


Clone

このインスタンス・メソッドではOracleBFileオブジェクトのコピーを作成します。

宣言

// C#
public object Clone();

戻り値

OracleBFileオブジェクト

実装

ICloneable

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

InvalidOperationException: OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。

備考

複製されたオブジェクトのプロパティ値は、複製元のオブジェクトのプロパティ値と同じです。

// Database Setup, if you have not done so yet.
/* Log on as DBA (SYS or SYSTEM) that has CREATE ANY DIRECTORY privilege.

CREATE OR REPLACE DIRECTORY MYDIR AS 'C:\TEMP';

*/

// C#

using System;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;

class CloneSample
{
  static void Main()
  {
    // Create MYDIR directory object as indicated previously and create a file
    // MyFile.txt with the text ABCDABC under C:\TEMP directory.
    // Note that the byte representation of the ABCDABC is 65666768656667

    string constr = "User Id=scott;Password=tiger;Data Source=oracle";
    OracleConnection con = new OracleConnection(constr);
    con.Open();

    OracleBFile bFile1 = new OracleBFile(con, "MYDIR", "MyFile.txt");

    // Prints "bFile1.Position = 0"
    Console.WriteLine("bFile1.Position = " + bFile1.Position);

    // Set the Position before calling Clone()
    bFile1.Position = 1;

    // Clone the OracleBFile
    OracleBFile bFile2 = (OracleBFile) bFile1.Clone();

    // Prints "bFile2.Position = 1"
    Console.WriteLine("bFile2.Position = " + bFile2.Position);

    bFile1.Close();
    bFile1.Dispose();

    bFile2.Close();
    bFile2.Dispose();

    con.Close();
    con.Dispose();
  }
}

Close

Streamをオーバーライドします。

このインスタンス・メソッドは現行のストリームをクローズし、それに関連する任意のリソースを解放します。

宣言

// C#
public override void Close();

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

InvalidOperationException: OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。

CloseFile

このインスタンス・メソッドでは、現行のBFILEインスタンスが参照するBFILEをクローズします。

宣言

// C#
public void CloseFile();

備考

BFILEが存在しているがオープンされていない場合は、エラーは戻されません。

Compare

このインスタンス・メソッドでは、2つのOracleBFileが参照するデータを比較します。

宣言

// C#
public int Compare(Int64 src_offset, OracleBFile obj, Int64 dst_offset,
    Int64 amount);

パラメータ

戻り値

次の数を戻します。

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

InvalidOperationException: OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。

ArgumentOutOfRangeException: src_offsetdst_offset、またはamount0未満です。

備考

指定されたオブジェクトと現行のインスタンスには、同じ接続を使用する必要があります。つまり、同じOracleConnectionオブジェクトを使用します。

BFILEは、操作前にOpenFileを使用してオープンされている必要があります。

// Database Setup, if you have not done so yet.
/* Log on as DBA (SYS or SYSTEM) that has CREATE ANY DIRECTORY privilege.

CREATE OR REPLACE DIRECTORY MYDIR AS 'C:\TEMP';

*/

// C#

using System;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;

class CompareSample
{
  static void Main()
  {
    // Create MYDIR directory object as indicated previously and create a file
    // MyFile.txt with the text ABCDABC under C:\TEMP directory.
    // Note that the byte representation of the ABCDABC is 65666768656667

    string constr = "User Id=scott;Password=tiger;Data Source=oracle";
    OracleConnection con = new OracleConnection(constr);
    con.Open();

    OracleBFile bFile1 = new OracleBFile(con, "MYDIR", "MyFile.txt");
    OracleBFile bFile2 = new OracleBFile(con, "MYDIR", "MyFile.txt");

    // Open the OracleBFiles
    bFile1.OpenFile();
    bFile2.OpenFile();

    // Compare 2 bytes from the 1st byte of bFile1 and
    // the 5th byte of bFile2 onwards
    int result = bFile1.Compare(1, bFile2, 5, 2);

    // Prints "result = 0" (Indicates the data is identical)
    Console.WriteLine("result = " + result);

    // Close the OracleBFiles
    bFile1.CloseFile();
    bFile2.CloseFile();

    bFile1.Close();
    bFile1.Dispose();

    bFile2.Close();
    bFile2.Dispose();

    con.Close();
    con.Dispose();
  }
}

CopyTo

CopyToでは、現行のインスタンスから指定されたオブジェクトにデータをコピーします。

オーバーロード・リスト:

CopyTo(OracleBlob)

このインスタンス・メソッドでは、現行のインスタンスから指定されたOracleBlobオブジェクトにデータをコピーします。

宣言

// C#
public Int64 CopyTo(OracleBlob obj);

パラメータ

戻り値

戻り値はコピーされた数

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

InvalidOperationException: この例外は次のいずれかの条件が存在する場合に表示されます。

備考

指定されたオブジェクトと現行のインスタンスには、同じ接続を使用する必要があります。つまり、同じOracleConnectionオブジェクトを使用します。

CopyTo(OracleBlob, Int64)

このインスタンス・メソッドでは、データを現行のOracleBFileインスタンスから指定されたOracleBlobオブジェクトに、指定されたオフセット先とともにコピーします。

宣言

// C#
public Int64 CopyTo(OracleBlob obj, Int64 dst_offset);

パラメータ

戻り値

戻り値はコピーされた数

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

ArgumentOutOfRangeException: dst_offset0未満です。

InvalidOperationException: この例外は次のいずれかの条件が存在する場合に表示されます。

備考

dst_offsetが、OracleBlobデータの終点を超えている場合は、dst_offsetに到達するまで、OracleBlobに空白が書き込まれます。

オフセットは0ベースです。この操作で文字変換は実行されません。

指定されたオブジェクトと現行のインスタンスには、同じ接続を使用する必要があります。つまり、同じOracleConnectionオブジェクトを使用します。

CopyTo(Int64, OracleBlob, Int64, Int64)

このインスタンス・メソッドでは、データを現行のOracleBFileインスタンスから、指定されたソース・オフセット、オフセット先および文字数とともに指定されたOracleBlobオブジェクトにコピーします。

宣言

// C#
public Int64 CopyTo(Int64 src_offset,OracleBlob obj,Int64 dst_offset,
   Int64 amount);

パラメータ

戻り値

戻り値はコピーされた数

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

ArgumentOutOfRangeException: src_offsetdst_offset、またはamount0未満です。

InvalidOperationException: この例外は次のいずれかの条件が存在する場合に表示されます。

備考

dst_offsetが、OracleBlobデータの終点を超えている場合は、dst_offsetに到達するまで、OracleBlobに空白が書き込まれます。

オフセットは0ベースです。この操作で文字変換は実行されません。

指定されたオブジェクトと現行のインスタンスには、同じ接続を使用する必要があります。つまり、同じOracleConnectionオブジェクトを使用します。

CopyTo(OracleClob)

このインスタンス・メソッドでは、現行のOracleBFileインスタンスから指定されたOracleClobオブジェクトにデータをコピーします。

宣言

// C#
public Int64 CopyTo(OracleClob obj);

パラメータ

戻り値

戻り値はコピーされた数

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

InvalidOperationException: この例外は次のいずれかの条件が存在する場合に表示されます。

備考

指定されたオブジェクトと現行のインスタンスには、同じ接続を使用する必要があります。つまり、同じOracleConnectionオブジェクトを使用します。

CopyTo(OracleClob, Int64)

このインスタンス・メソッドでは、データを現行のOracleBFileインスタンスから指定されたOracleClobオブジェクトに指定されたオフセット先とともにコピーします。

宣言

// C#
public Int64 CopyTo(OracleClob obj, Int64 dst_offset);

パラメータ

戻り値

コピーした数

例外

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

ArgumentOutOfRangeException: dst_offset0未満です。

InvalidOperationException: この例外は次のいずれかの条件が存在する場合に表示されます。

備考

dst_offsetが、OracleClobデータの終点を超えている場合は、dst_offsetに到達するまで、OracleClobに空白が書き込まれます。

オフセットは0ベースです。この操作で文字変換は実行されません。

指定されたオブジェクトと現行のインスタンスには、同じ接続を使用する必要があります。つまり、同じOracleConnectionオブジェクトを使用します。

CopyTo(Int64, OracleClob, Int64, Int64)

このインスタンス・メソッドでは、データを現行のOracleBFileインスタンスから指定されたOracleClobオブジェクトに指定されたソース・オフセット、オフセット先および文字数とともにコピーします。

宣言

// C#
public Int64 CopyTo(Int64 src_offset,OracleClob obj,Int64 dst_offset,
   Int64 amount);

パラメータ

戻り値

戻り値はコピーされた数

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

ArgumentOutOfRangeException: src_offsetdst_offset、またはamount0未満です。

InvalidOperationException: この例外は次のいずれかの条件が存在する場合に表示されます。

備考

dst_offsetが、現在のOracleClobデータの終点を超えている場合は、dst_offsetに到達するまで、OracleClobに空白が書き込まれます。

オフセットは0ベースです。この操作で文字変換は実行されません。

指定されたオブジェクトと現行のインスタンスには、同じ接続を使用する必要があります。つまり、同じOracleConnectionオブジェクトを使用します。

Dispose

このインスタンス・メソッドでは、このオブジェクトによって割り当てられたリソースを解除します。

宣言

// C#
public void Dispose();

実装

IDisposable

備考

引き続き一部のプロパティにアクセスすることはできますが、その値は信頼できません。リソースが解除されているため、メソッドを呼び出すと例外となる可能性があります。オブジェクトは、処理後は再度使用できません。

IsEqual

このインスタンスではLOB参照を比較します。

宣言

// C#
public bool IsEqual(OracleBFile obj);

パラメータ

戻り値

現行のOracleBFileおよび指定されたOracleBFileオブジェクトが同じ外部LOBを参照する場合は、trueを戻します。それ以外の場合はfalseを戻します。

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

InvalidOperationException: OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。

備考

2つの異なるOracleBFileインスタンスが同じ外部LOBを参照できるため、2つのOracleBFileオブジェクトが==またはEquals()に対してfalseを戻しても、このメソッドではtrueを戻すことができます。

指定されたオブジェクトと現行のインスタンスには、同じ接続を使用する必要があります。つまり、同じOracleConnectionオブジェクトを使用します。

OpenFile

このインスタンス・メソッドでは、FileNameおよびDirectoryNameによって指定されたBFILEをオープンします。

宣言

// C#
public void OpenFile();

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

InvalidOperationException: OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。

備考

Compare()CopyTo()Read()およびSearch()などの多くの操作の場合は、操作前にOpenFileを使用してBFILEをオープンしておく必要があります。

オープンしたBFILEでのOpenFileの呼出しはできません。

Read

Streamをオーバーライドします。

このインスタンス・メソッドでは、OracleBFileインスタンスから指定バイト数を読み取り、bufferを移入します。

宣言

// C#
public override int Read(byte[ ] buffer, int offset, int count);

パラメータ

戻り値

この戻り値は、BFILE、つまり外部LOBから読み取られるバイト数を示します。

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

InvalidOperationException: OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。

ArgumentOutOfRangeException: offsetまたはcountパラメータが0未満、offsetbuffer.Length以上、またはoffsetcountの合計がbuffer.Lengthより大きい場合のいずれか。

備考

LOBデータの読取りは、Positionプロパティにより指定された位置から開始されます。

// Database Setup, if you have not done so yet.
/* Log on as DBA (SYS or SYSTEM) that has CREATE ANY DIRECTORY privilege.

CREATE OR REPLACE DIRECTORY MYDIR AS 'C:\TEMP';

*/

// C#

using System;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;

class ReadSample
{
  static void Main()
  {
    // Create MYDIR directory object as indicated previously and create a file
    // MyFile.txt with the text ABCDABC under C:\TEMP directory.
    // Note that the byte representation of the ABCDABC is 65666768656667

    string constr = "User Id=scott;Password=tiger;Data Source=oracle";
    OracleConnection con = new OracleConnection(constr);
    con.Open();

    OracleBFile bFile = new OracleBFile(con, "MYDIR", "MyFile.txt");

    // Open the OracleBFile
    bFile.OpenFile();

    // Read 7 bytes into readBuffer, starting at buffer offset 0
    byte[] readBuffer = new byte[7];
    int bytesRead = bFile.Read(readBuffer, 0, 7);

    // Prints "bytesRead  = 7"
    Console.WriteLine("bytesRead  = " + bytesRead);

    // Prints "readBuffer = 65666768656667"
    Console.Write("readBuffer = ");
    for(int index = 0; index <  readBuffer.Length; index++)
    {
      Console.Write(readBuffer[index]);
    }
    Console.WriteLine();

    // Close the OracleBFile
    bFile.CloseFile();

    bFile.Close();
    bFile.Dispose();

    con.Close();
    con.Dispose();
  }
}

Search

このインスタンス・メソッドでは、OracleBFileの現行のインスタンスのバイナリ・パターンを検索します。

宣言

// C#
public int Search(byte[ ] val, Int64 offset, Int64 nth);

パラメータ

戻り値

一致のnth回目の出現に対して、一致パターン(バイト表示)の起点の絶対offsetを戻します。それ以外の場合は、0が戻されます。

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

InvalidOperationException: OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。

ArgumentOutOfRangeException: offset0未満の場合、nth0以下の場合、val.Length16383より大きい場合、nthOracleBFile.MaxSize以上の場合またはoffsetOracleBFile.MaxSize以上の場合のいずれか。

備考

検索パターンの制限は16383バイトです。

// Database Setup, if you have not done so yet.
/* Log on as DBA (SYS or SYSTEM) that has CREATE ANY DIRECTORY privilege.

CREATE OR REPLACE DIRECTORY MYDIR AS 'C:\TEMP';

*/

// C#

using System;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;

class SearchSample
{
  static void Main()
  {
    // Create MYDIR directory object as indicated previously and create a file
    // MyFile.txt with the text ABCDABC under C:\TEMP directory.
    // Note that the byte representation of the ABCDABC is 65666768656667

    string constr = "User Id=scott;Password=tiger;Data Source=oracle";
    OracleConnection con = new OracleConnection(constr);
    con.Open();

    OracleBFile bFile = new OracleBFile(con, "MYDIR", "MyFile.txt");

    // Open the OracleBFile
    bFile.OpenFile();

    // Search for the 2nd occurrence of a byte pattern {66,67}
    // starting from byte offset 1 in the OracleBFile
    byte[] pattern = new byte[2] {66, 67};
    long posFound = bFile.Search(pattern, 1, 2);

    // Prints "posFound = 6"
    Console.WriteLine("posFound = " + posFound);

    // Close the OracleBFile
    bFile.CloseFile();

    bFile.Close();
    bFile.Dispose();

    con.Close();
    con.Dispose();
  }
}

Seek

Streamをオーバーライドします。

このインスタンス・メソッドでは現行のLOBストリームに位置を設定します。

宣言

// C#
public override Int64 Seek(Int64 offset, SeekOrigin origin);

パラメータ

戻り値

位置を示すInt64が戻されます。

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

InvalidOperationException: OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。

備考

offsetが負の場合は、新規位置がoffsetによって指定されたバイト数だけ、originで指定した位置より前にあります。

offsetがゼロの場合は、originで指定した位置が新規位置となります。

offsetが正の場合は、新規位置はoffsetによって指定されたバイト数だけ、originで指定した位置より後にあります。

SeekOrigin.Beginはストリームの開始を指定します。

SeekOrigin.Currentはストリーム内の現行位置を指定します。

SeekOrigin.Endはストリームの終点を指定します。

// Database Setup, if you have not done so yet.
/* Log on as DBA (SYS or SYSTEM) that has CREATE ANY DIRECTORY privilege.

CREATE OR REPLACE DIRECTORY MYDIR AS 'C:\TEMP';

*/

// C#

using System;
using System.IO;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;

class SeekSample
{
  static void Main()
  {
    // Create MYDIR directory object as indicated previously and create a file
    // MyFile.txt with the text ABCDABC under C:\TEMP directory.
    // Note that the byte representation of the ABCDABC is 65666768656667

    string constr = "User Id=scott;Password=tiger;Data Source=oracle";
    OracleConnection con = new OracleConnection(constr);
    con.Open();

    OracleBFile bFile = new OracleBFile(con, "MYDIR", "MyFile.txt");

    // Open the OracleBFile
    bFile.OpenFile();

    // Set the Position to 2 with respect to SeekOrigin.Begin
    long newPosition = bFile.Seek(2, SeekOrigin.Begin);

    // Prints "newPosition     = 2"
    Console.WriteLine("newPosition     = " + newPosition);

    // Prints "bFile.Position  = 2"
    Console.WriteLine("bFile.Position  = " + bFile.Position);

    // Read 2 bytes into readBuffer, starting at buffer offset 1
    byte[] readBuffer = new byte[4];
    int bytesRead = bFile.Read(readBuffer, 1, 2);

    // Prints "bytesRead       = 2"
    Console.WriteLine("bytesRead       = " + bytesRead);

    // Prints "readBuffer      = 067680"
    Console.Write("readBuffer      = ");
    for(int index = 0; index <  readBuffer.Length; index++)
    {
      Console.Write(readBuffer[index]);
    }
    Console.WriteLine();

    // Close the OracleBFile
    bFile.CloseFile();

    bFile.Close();
    bFile.Dispose();

    con.Close();
    con.Dispose();
  }
}