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
要件
| プロバイダ | ODP.NET管理対象外ドライバ | ODP.NET管理対象ドライバ |
| アセンブリ | Oracle.DataAccess.dll |
Oracle.ManagedDataAccess.dll |
| ネームスペース | Oracle.DataAccess.Types |
Oracle.ManagedDataAccess.Types |
| .NET Framework | 3.5, 4.0, 4.5 | 4.0, 4.5 |
スレッド安全性
パブリック静的メソッドはスレッドセーフですが、インスタンス・メソッドではスレッド安全性は保証されません。
備考
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();
}
}
OracleBFileメンバーは次の表にリスト表示されています。
OracleBFileコンストラクタ
OracleBFileコンストラクタを、表13-1にリストします。
OracleBFile静的フィールド
OracleBFile静的フィールドを、表13-2にリストします。
表13-2 OracleBFile静的フィールド
| フィールド | 説明 |
|---|---|
|
|
静的フィールドは |
|
|
|
OracleBFile静的メソッド
OracleBFile静的メソッドを、表13-3にリストします。
OracleBFileインスタンス・プロパティ
OracleBFileインスタンス・プロパティを、表13-4にリストします。
表13-4 OracleBFileインスタンス・プロパティ
| プロパティ | 説明 |
|---|---|
|
LOBストリームが読取り可能かどうかを示します |
|
|
順方向および逆方向検索操作が実行可能かどうかを示します |
|
|
|
LOBオブジェクトが書込みをサポートしているかどうかを示します |
|
|
|
|
|
|
|
|
指定された |
|
|
|
|
|
|
|
|
現行インスタンスにNULL値があるかどうかを示します |
|
|
|
|
|
|
|
|
LOBストリームの現行の読取り位置を示します |
|
|
データを |
OracleBFileインスタンス・メソッド
OracleBFileインスタンス・メソッドを、表13-5にリストします。
表13-5 OracleBFileインスタンス・メソッド
| メソッド | 説明 |
|---|---|
|
|
|
|
|
サポート対象外 |
|
|
|
|
|
現行のストリームをクローズし、ストリームに関連するすべてのリソースを解除します |
|
|
現行の |
|
|
2つの |
|
|
|
|
|
指定どおりにデータをコピーします(オーバーロード) |
|
|
このオブジェクトによって割り当てられたリソースを解除します |
|
|
|
|
|
サポート対象外 |
|
|
|
|
|
サポート対象外 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LOB参照を比較します |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
現行のLOBストリームに位置を設定します |
|
|
サポート対象外 |
|
|
|
|
|
サポート対象外 |
|
|
サポート対象外 |
OracleBFileコンストラクタでは、OracleBFileクラスの新規インスタンスを作成します。
オーバーロード・リスト:
このコンストラクタでは、OracleBFileクラスのインスタンスをOracleConnectionオブジェクトとともに作成します。
OracleBFile(OracleConnection, string, string)
このコンストラクタでは、OracleConnectionオブジェクト付きOracleBFileクラスのインスタンス、BFILEの位置およびBFILEの名前を作成します。
このコンストラクタでは、OracleBFileクラスのインスタンスをOracleConnectionオブジェクトとともに作成します。
宣言
// C#
public OracleBFile(OracleConnection con);
パラメータ
con
OracleConnectionオブジェクト
例外
InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。
備考
接続は、アプリケーションによって明示的にオープンされる必要があります。OracleBFileでは接続を暗黙的にオープンしません。
このコンストラクタでは、OracleConnectionオブジェクト付きOracleBFileクラスのインスタンス、BFILEの位置およびBFILEの名前を作成します。
宣言
// C# public OracleBFile(OracleConnection con, string directoryName, string fileName);
パラメータ
con
OracleConnectionオブジェクト
directoryName
CREATE DIRECTORY SQL文によって作成されたディレクトリの別名
fileName
外部LOBの名前
例外
InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。
備考
OracleConnectionは、アプリケーションによって明示的にオープンされる必要があります。OracleBFileでは接続を暗黙的にオープンしません。
OracleBFileインスタンスを使用してBFILE列をSQL INSERT文の入力パラメータとして初期化するには、directoryNameおよびfileNameを正しく設定する必要があります。
OracleBFile静的フィールドを、表13-6にリストします。
表13-6 OracleBFile静的フィールド
| フィールド | 説明 |
|---|---|
|
|
静的フィールドは |
|
|
|
この静的フィールドはBFILEが保持できる最大バイト数、4,294,967,295(2^32 - 1)バイトを保持します。
宣言
// C# public static readonly Int64 MaxSize = 4294967295;
備考
このフィールドは操作が許容最大長を超えているかどうかをチェックするコードに便利です。
OracleBFileインスタンス・プロパティを、表13-8にリストします。
表13-8 OracleBFileインスタンス・プロパティ
| プロパティ | 説明 |
|---|---|
|
LOBストリームが読取り可能かどうかを示します |
|
|
順方向および逆方向検索操作が実行可能かどうかを示します |
|
|
|
LOBオブジェクトが書込みをサポートしているかどうかを示します |
|
|
|
|
|
|
|
|
指定された |
|
|
|
|
|
|
|
|
現行インスタンスにNULL値があるかどうかを示します |
|
|
|
|
|
|
|
|
LOBストリームの現行の読取り位置を示します |
|
|
データを |
Streamをオーバーライドします。
このインスタンス・プロパティではLOBストリームが読取り可能かどうかを示します。
宣言
// C#
public override bool CanRead{get;}
プロパティ値
LOBストリームが読取り可能の場合はtrueを戻し、それ以外の場合はfalseを戻します。
Streamをオーバーライドします。
このインスタンス・プロパティでは、順方向および逆方向シーク操作が実行可能かどうかを示します。
宣言
// C#
public override bool CanSeek{get;}
プロパティ値
順方向および逆方向シーク操作が実行可能の場合はtrueを戻し、それ以外の場合はfalseを戻します。
Streamをオーバーライドします。
このインスタンス・プロパティでは、LOBオブジェクトが書込みをサポートしているかどうかを示します。
宣言
// C#
public override bool CanWrite{get;}
プロパティ値
BFILEは読取り専用
備考
BFILEは読取り専用であるため、ブール値は常にfalseです。
このインスタンス・プロパティでは、BFILEからの読取りに使用する接続を示します。
宣言
// C#
public OracleConnection Connection {get;}
プロパティ値
OracleConnectionのオブジェクト
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
このインスタンス・プロパティでは、BFILEのディレクトリの別名を示します。
宣言
// C#
public string DirectoryName {get;set;}
プロパティ値
string
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - BFILEがオープンされているときに変更されたDirectoryNameの値。
備考
DirectoryNameの最大長は30バイトです。
このインスタンス・プロパティでは、DirectoryNameおよびFileNameによって指定されたBFILEが存在するかどうかを示します。
宣言
// C#
public bool FileExists {get;}
プロパティ値
bool
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。
備考
接続、ファイル名およびディレクトリ名が指定されていない場合は、このプロパティはデフォルトでfalseに設定されます。
このインスタンス・プロパティでは、BFILEの名前を示します。
宣言
// C#
public string FileName {get;set}
プロパティ値
BFILE名を含むstring
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - BFILEがオープンされているときに変更されたDirectoryNameの値。
備考
FileNameの最大長は255バイトです。
BFILEオブジェクトがオープンされているときにFileNameプロパティを変更すると例外が発生します。
このインスタンス・プロパティでは、BFILEが空かどうかを示します。
宣言
// C#
public bool IsEmpty {get;}
プロパティ値
bool
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
このプロパティは現行インスタンスにNULL値があるかどうかを示します。
宣言
// C#
public bool IsNull{get;}
プロパティ値
現行インスタンスにNULL値がある場合はtrue、それ以外の場合はfalseを戻します。
このインスタンス・プロパティでは、BFILEがこのインスタンスによってオープンされているかどうかを示します。
宣言
// C#
public bool IsOpen {get;}
プロパティ値
bool
Streamをオーバーライドします。
このインスタンス・プロパティでは、BFILEデータのサイズをバイト数で示します。
宣言
// C#
public override Int64 Length {get;}
プロパティ値
Int64
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。
Streamをオーバーライドします。
このインスタンスではLOBストリームの現行の読取り位置を示します。
宣言
// C#
public override Int64 Position{get; set;}
プロパティ値
読取り位置を示すInt64値
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。
ArgumentOutOfRangeException - 値は0未満です。
このインスタンス・プロパティでは、データをBFILEの最初のバイトを起点とするバイト配列として戻します。
宣言
// C#
public byte[] Value{get;}
プロパティ値
バイト配列
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。
備考
データ長はバイト配列の最大長によって制限されています。Positionプロパティの現行値は使用または変更されません。
OracleBFileインスタンス・メソッドを、表13-9にリストします。
表13-9 OracleBFileインスタンス・メソッド
| メソッド | 説明 |
|---|---|
|
|
|
|
|
サポート対象外 |
|
|
|
|
|
現行のストリームをクローズし、ストリームに関連するすべてのリソースを解除します |
|
|
現行の |
|
|
2つの |
|
|
|
|
|
指定どおりにデータをコピーします(オーバーロード) |
|
|
このオブジェクトによって割り当てられたリソースを解除します |
|
|
|
|
|
サポート対象外 |
|
|
|
|
|
サポート対象外 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LOB参照を比較します |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
現行のLOBストリームに位置を設定します |
|
|
サポート対象外 |
|
|
|
|
|
サポート対象外 |
|
|
サポート対象外 |
このインスタンス・メソッドでは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 above 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");
// Open the OracleBFile
bFile1.OpenFile();
// 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();
// Open the OracleBFile
bFile2.OpenFile();
// Prints "bFile2.Position = 1"
Console.WriteLine("bFile2.Position = " + bFile2.Position);
// Close the OracleBFile
bFile1.CloseFile();
bFile1.Close();
bFile1.Dispose();
// Close the Cloned OracleBFile
bFile2.CloseFile();
bFile2.Close();
bFile2.Dispose();
con.Close();
con.Dispose();
}
}
Streamをオーバーライドします。
このインスタンス・メソッドは現行のストリームをクローズし、それに関連する任意のリソースを解放します。
宣言
// C# public override void Close();
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。
このインスタンス・メソッドでは、現行のBFILEインスタンスが参照するBFILEをクローズします。
宣言
// C# public void CloseFile();
備考
BFILEが存在しているがオープンされていない場合は、エラーは戻されません。
このインスタンス・メソッドでは、2つのOracleBFileが参照するデータを比較します。
宣言
// C# public int Compare(Int64 src_offset, OracleBFile obj, Int64 dst_offset, Int64 amount);
パラメータ
src_offset
現行インスタンスのオフセット
obj
指定されたOracleBFileオブジェクト
dst_offset
OracleBFileオブジェクトのオフセット
amount
比較するバイト数
戻り値
次の数を戻します。
ゼロ未満:現行のインスタンスのBFILEデータが指定されたBFILEデータの値より小さい場合
ゼロ:どちらのBFILEにも同じデータが格納されている場合
ゼロ超過:現行のインスタンスのBFILEデータが指定されたBFILEデータの値より大きい場合
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。
ArgumentOutOfRangeException - src_offset、dst_offsetまたはamountが0より小さい場合。
備考
指定されたオブジェクトと現行のインスタンスには、同じ接続を使用する必要があります。つまり、同じ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では、現行のインスタンスから指定されたオブジェクトにデータをコピーします。
オーバーロード・リスト:
このインスタンス・メソッドでは、現行のインスタンスから指定されたOracleBlobオブジェクトにデータをコピーします。
このインスタンス・メソッドでは、データを現行のOracleBFileインスタンスから指定されたOracleBlobオブジェクトに、指定されたオフセット先とともにコピーします。
CopyTo(Int64, OracleBlob, Int64, Int64)
このインスタンス・メソッドでは、データを現行のOracleBFileインスタンスから、指定されたソース・オフセット、オフセット先および文字数とともに指定されたOracleBlobオブジェクトにコピーします。
このインスタンス・メソッドでは、現行のOracleBFileインスタンスから指定されたOracleClobオブジェクトにデータをコピーします。
このインスタンス・メソッドでは、データを現行のOracleBFileインスタンスから指定されたOracleClobオブジェクトに指定されたオフセット先とともにコピーします。
CopyTo(Int64, OracleClob, Int64, Int64)
このインスタンス・メソッドでは、データを現行のOracleBFileインスタンスから指定されたOracleClobオブジェクトに指定されたソース・オフセット、オフセット先および文字数とともにコピーします。
このインスタンス・メソッドでは、現行のインスタンスから指定されたOracleBlobオブジェクトにデータをコピーします。
宣言
// C#
public Int64 CopyTo(OracleBlob obj);
パラメータ
obj
データのコピー先のOracleBlobオブジェクト
戻り値
戻り値はコピーされた数
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - この例外は次のいずれかの条件が存在する場合に表示されます。
OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされた場合
LOBオブジェクト・パラメータにオブジェクト以外の接続がある場合
備考
指定されたオブジェクトと現行のインスタンスには、同じ接続を使用する必要があります。つまり、同じOracleConnectionオブジェクトを使用します。
このインスタンス・メソッドでは、データを現行のOracleBFileインスタンスから指定されたOracleBlobオブジェクトに、指定されたオフセット先とともにコピーします。
宣言
// C# public Int64 CopyTo(OracleBlob obj, Int64 dst_offset);
パラメータ
obj
データのコピー先のOracleBlobオブジェクト
dst_offset
OracleBlobオブジェクトをコピーするオフセット(バイト)
戻り値
戻り値はコピーされた数
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
ArgumentOutOfRangeException - dst_offsetは0未満です。
InvalidOperationException - この例外は次のいずれかの条件が存在する場合に表示されます。
OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされた場合
LOBオブジェクト・パラメータにオブジェクト以外の接続がある場合
備考
dst_offsetがOracleBlobデータの終点を超えている場合は、dst_offsetに到達するまでOracleBlobに空白が書き込まれます。
オフセットは0ベースです。この操作で文字変換は実行されません。
指定されたオブジェクトと現行のインスタンスには、同じ接続を使用する必要があります。つまり、同じOracleConnectionオブジェクトを使用します。
このインスタンス・メソッドでは、データを現行のOracleBFileインスタンスから、指定されたソース・オフセット、オフセット先および文字数とともに指定されたOracleBlobオブジェクトにコピーします。
宣言
// C# public Int64 CopyTo(Int64 src_offset,OracleBlob obj,Int64 dst_offset, Int64 amount);
パラメータ
src_offset
データの読取り元の現行インスタンス内のオフセット(バイト)
obj
データのコピー先のOracleBlobオブジェクト
dst_offset
OracleBlobオブジェクトのコピー先のオフセット(バイト)
amount
コピーするデータ容量
戻り値
戻り値はコピーされた数
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
ArgumentOutOfRangeException - src_offset、dst_offsetまたはamountが0より小さい場合。
InvalidOperationException - この例外は次のいずれかの条件が存在する場合に表示されます。
OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされた場合
LOBオブジェクト・パラメータにオブジェクト以外の接続がある場合
備考
dst_offsetがOracleBlobデータの終点を超えている場合は、dst_offsetに到達するまでOracleBlobに空白が書き込まれます。
オフセットは0ベースです。この操作で文字変換は実行されません。
指定されたオブジェクトと現行のインスタンスには、同じ接続を使用する必要があります。つまり、同じOracleConnectionオブジェクトを使用します。
このインスタンス・メソッドでは、現行のOracleBFileインスタンスから指定されたOracleClobオブジェクトにデータをコピーします。
宣言
// C#
public Int64 CopyTo(OracleClob obj);
パラメータ
obj
データのコピー先のOracleClobオブジェクト
戻り値
戻り値はコピーされた数
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - この例外は次のいずれかの条件が存在する場合に表示されます。
OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされた場合
LOBオブジェクト・パラメータにオブジェクト以外の接続がある場合
備考
指定されたオブジェクトと現行のインスタンスには、同じ接続を使用する必要があります。つまり、同じOracleConnectionオブジェクトを使用します。
このインスタンス・メソッドでは、データを現行のOracleBFileインスタンスから指定されたOracleClobオブジェクトに指定されたオフセット先とともにコピーします。
宣言
// C# public Int64 CopyTo(OracleClob obj, Int64 dst_offset);
パラメータ
obj
データのコピー先のOracleClobオブジェクト
dst_offset
OracleClobオブジェクトをコピーするオフセット(文字)
戻り値
コピーした数
例外
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
ArgumentOutOfRangeException - dst_offsetは0未満です。
InvalidOperationException - この例外は次のいずれかの条件が存在する場合に表示されます。
OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされた場合
LOBオブジェクト・パラメータにオブジェクト以外の接続がある場合
備考
dst_offsetがOracleClobデータの終点を超えている場合は、dst_offsetに到達するまでOracleClobに空白が書き込まれます。
オフセットは0ベースです。この操作で文字変換は実行されません。
指定されたオブジェクトと現行のインスタンスには、同じ接続を使用する必要があります。つまり、同じOracleConnectionオブジェクトを使用します。
このインスタンス・メソッドでは、データを現行のOracleBFileインスタンスから指定されたOracleClobオブジェクトに指定されたソース・オフセット、オフセット先および文字数とともにコピーします。
宣言
// C# public Int64 CopyTo(Int64 src_offset,OracleClob obj,Int64 dst_offset, Int64 amount);
パラメータ
src_offset
データの読取り元の現行インスタンス内のオフセット(文字)
obj
データのコピー先のOracleClobオブジェクト
dst_offset
OracleClobオブジェクトをコピーするオフセット(文字)
amount
コピーするデータ容量
戻り値
戻り値はコピーされた数
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
ArgumentOutOfRangeException - src_offset、dst_offsetまたはamountが0より小さい場合。
InvalidOperationException - この例外は次のいずれかの条件が存在する場合に表示されます。
OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされた場合
LOBオブジェクト・パラメータにオブジェクト以外の接続がある場合
備考
dst_offsetが現行のOracleClobデータの終点を超えている場合は、dst_offsetに到達するまでOracleClobに空白が書き込まれます。
オフセットは0ベースです。この操作で文字変換は実行されません。
指定されたオブジェクトと現行のインスタンスには、同じ接続を使用する必要があります。つまり、同じOracleConnectionオブジェクトを使用します。
このインスタンス・メソッドでは、このオブジェクトによって割り当てられたリソースを解除します。
宣言
// C# public void Dispose();
実装
IDisposable
備考
引き続き一部のプロパティにアクセスすることはできますが、その値は信頼できません。リソースが解除されているため、メソッドを呼び出すと例外となる可能性があります。オブジェクトは、処理後は再度使用できません。
このインスタンスではLOB参照を比較します。
宣言
// C#
public bool IsEqual(OracleBFile obj);
パラメータ
obj
指定されたOracleBFileオブジェクト
戻り値
現行のOracleBFileおよび指定されたOracleBFileオブジェクトが同じ外部LOBを参照する場合は、trueを戻します。それ以外の場合はfalseを戻します。
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。
備考
2つの異なるOracleBFileインスタンスが同じ外部LOBを参照できるため、2つのOracleBFileオブジェクトが==またはEquals()に対してfalseを戻しても、このメソッドではtrueを戻すことができます。
指定されたオブジェクトと現行のインスタンスには、同じ接続を使用する必要があります。つまり、同じOracleConnectionオブジェクトを使用します。
このインスタンス・メソッドでは、FileNameおよびDirectoryNameによって指定されたBFILEをオープンします。
宣言
// C# public void OpenFile();
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。
備考
Compare()、CopyTo()、Read()およびSearch()などの多くの操作の場合は、操作前にOpenFileを使用してBFILEをオープンしておく必要があります。
オープンしたBFILEでのOpenFileの呼出しはできません。
Streamをオーバーライドします。
このインスタンス・メソッドでは、OracleBFileインスタンスから指定バイト数を読み取り、bufferを移入します。
宣言
// C# public override int Read(byte[] buffer, int offset, int count);
パラメータ
buffer
移入されるバイト配列バッファ
offset
移入されるバイト配列バッファのオフセット
count
読取りバイト数
戻り値
この戻り値は、BFILE、つまり外部LOBから読み取られるバイト数を示します。
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。
ArgumentOutOfRangeException - offsetまたはcountパラメータが0未満、offsetがbuffer.Length以上、またはoffsetとcountの合計が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();
}
}
このインスタンス・メソッドでは、OracleBFileの現行のインスタンスのバイナリ・パターンを検索します。
宣言
// C# public int Search(byte[] val, Int64 offset, Int64 nth);
パラメータ
val
検索対象のバイナリ・パターン
offset
OracleBFileの検索が開始される0ベース・オフセット(バイト)
nth
オフセットが戻される特定の一致の状態(1ベース)
戻り値
一致のnth回目の出現に対して、一致パターン(バイト表示)の起点の絶対offsetを戻します。それ以外の場合は、0が戻されます。
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。
ArgumentOutOfRangeException - offsetが0未満の場合、nthが0以下の場合、val.Lengthが16383より大きい場合、nthがOracleBFile.MaxSize以上の場合またはoffsetがOracleBFile.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();
}
}
Streamをオーバーライドします。
このインスタンス・メソッドでは現行のLOBストリームに位置を設定します。
宣言
// C# public override Int64 Seek(Int64 offset, SeekOrigin origin);
パラメータ
offset
起点に相対的なバイト・オフセット
origin
新規位置を取得する場合に使用する参照ポイントを示すタイプSystem.IO.SeekOriginの値
戻り値
位置を示す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();
}
}