| Oracle® Data Provider for .NET開発者ガイド リリース9.2.0.4 部品番号 B13807-01 |
|
Oracle.DataAccess.Typesネームスペース(ODP.NET型)、14/19
OracleBFileは、BFILEデータへの参照を持つオブジェクトです。BFILEに対する操作を実行するためのメソッドを提供します。
Object
MarshalByRefObject
Stream
OracleBFile
// C# public sealed class OracleBFile : Stream, ICloneable
インスタンス・メソッドではスレッド・セーフティを保証しませんが、すべてのpublic staticメソッドはスレッド・セーフです。
OracleBFileは、Oracle8.x以上で稼働しているアプリケーションに対してサポートされています。
[C#] ... // assume: // 1. A valid connection is made // 2. contains a file c:\MyDir\MyFile.txt OracleBFile oraBFile = new OracleBFile(con, "c:\\MyDir", "MyFile.txt"); // Open the oraBFile oraBFile.Open(); // Read some data ... int byteRead = oraBFile.Read(buffer, bufferOffset, amountToBeRead); // Search for the 2nd occurrence of a byte pattern '123' // from oraBFile starting at offset 1 byte[] pattern = new byte[3] { 1,2,3 }; int positionFound = oraBFile.Search(pattern, 1, 2); // Close the BFile oraBFile.CloseFile(); ...
ネームスペース: Oracle.DataAccess.Types
アセンブリ: Oracle.DataAccess.dll
OracleBFileのメンバーを次の表に示します。
OracleBFileのコンストラクタを表5-147に示します。
| コンストラクタ | 説明 |
|---|---|
|
|
OracleBFileのstaticフィールドを表5-148に示します。
| フィールド | 説明 |
|---|---|
|
|
OracleBFileのstaticメソッドを表5-149に示します。
| メソッド | 説明 |
|---|---|
|
|
|
OracleBFileのインスタンス・プロパティを表5-150に示します。
OracleBFileのインスタンス・メソッドを表5-151に示します。
OracleBFileのコンストラクタは、OracleBFileクラスの新規インスタンスを作成します。
このコンストラクタは、OracleConnectionオブジェクトを使用してOracleBFileクラスのインスタンスを作成します。
このコンストラクタは、OracleConnectionオブジェクト、BFILEの場所およびBFILEの名前を使用してOracleBFileクラスのインスタンスを作成します。
このコンストラクタは、OracleConnectionオブジェクトを使用してOracleBFileクラスのインスタンスを作成します。
// C# public OracleBFile(OracleConnection con);
InvalidOperationException: OracleConnectionがオープンされていないか、オブジェクトの存続期間中にクローズされました。
接続は、アプリケーションで明示的にオープンされる必要があります。OracleBFileは、暗黙的に接続をオープンしません。
このコンストラクタは、OracleConnectionオブジェクト、BFILEの場所およびBFILEの名前を使用してOracleBFileクラスのインスタンスを作成します。
// C# public OracleBFile(OracleConnection con, string directoryName, string fileName);
InvalidOperationException: OracleConnectionがオープンされていないか、オブジェクトの存続期間中にクローズされました。
OracleConnectionは、アプリケーションで明示的にオープンされる必要があります。OracleBFileは、暗黙的に接続をオープンしません。
OracleBFileインスタンスをSQLのINSERT文の入力パラメータとして使用し、BFILE列を初期化するには、directoryNameおよびfileNameが適切に設定されている必要があります。
OracleBFileのstaticフィールドを表5-152に示します。
| フィールド | 説明 |
|---|---|
|
|
このstaticフィールドは、BFILEが保持できるバイト数の最大値を保持します。最大値は4,294,967,295(232 - 1)バイトです。
// C# public static readonly Int64 MaxSize = 4294967295;
このフィールドは、操作が許容される最大長を超えるかどうかをチェックするコードで使用すると便利です。
OracleBFileのstaticメソッドを表5-153に示します。
| メソッド | 説明 |
|---|---|
|
|
|
OracleBFileのインスタンス・プロパティを表5-154に示します。
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: オブジェクトがすでに破棄されています。
このインスタンス・プロパティは、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のインスタンス・メソッドを表5-155に示します。
このインスタンス・メソッドは、OracleBFileオブジェクトのコピーを作成します。
// C# public object Clone();
OracleBFileオブジェクト
ICloneable
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: OracleConnectionがオープンされていないか、オブジェクトの存続期間中にクローズされました。
クローニングされたオブジェクトは、クローニング元のオブジェクトと同じプロパティ値を持ちます。
// C# ... //Need a proper casting for the return value when cloned OracleBFile oraBfile_cloned = (OracleBFile) oraBfile.Clone(); ...
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を使用してオープンされている必要があります。
// C# ... // Assume you have 2 valid files in C:\MyDir OracleBFile myBFile1 = new OracleBFile(con, "c:\\MyDir", "MyFile1.txt"); OracleBFile myBFile2 = new OracleBFile(con, "c:\\MyDir", "MyFile2.txt"); int src_offset = 10; int dst_offset = 20; int amount = 5; int result = myBFile1.Compare(src_offset, myBFile2, dst_offset, amount); if ( result == 0 ) Console.WriteLine("Identical"); else Console.WriteLine("Not Identical"); ...
CopyToは、現在のインスタンスから指定されたオブジェクトにデータをコピーします。
このインスタンス・メソッドは、現在のインスタンスから指定されたOracleBlobオブジェクトにデータをコピーします。
このインスタンス・メソッドは、現在のOracleBFileインスタンスから指定されたOracleBlobオブジェクトに、指定された宛先オフセットを使用してデータをコピーします。
このインスタンス・メソッドは、現在のOracleBFileインスタンスから指定されたOracleBlobオブジェクトに、指定されたソース・オフセット、宛先オフセットおよび文字数を使用してデータをコピーします。
このインスタンス・メソッドは、現在のOracleBFileインスタンスから指定されたOracleClobオブジェクトにデータをコピーします。
このインスタンス・メソッドは、現在のOracleBFileインスタンスから指定されたOracleClobオブジェクトに、指定された宛先オフセットを使用してデータをコピーします。
このインスタンス・メソッドは、現在のOracleBFileインスタンスから指定されたOracleClobオブジェクトに、指定されたソース・オフセット、宛先オフセットおよび文字数を使用してデータをコピーします。
このインスタンス・メソッドは、現在のインスタンスから指定されたOracleBlobオブジェクトにデータをコピーします。
// C# public Int64 CopyTo(OracleBlob obj);
返される値は、コピーされたデータ量です。
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: この例外は、次の条件のいずれかに該当する場合にスローされます。
指定されたオブジェクトおよび現在のインスタンスは、同じ接続、つまり同じOracleConnectionオブジェクトを使用している必要があります。
このインスタンス・メソッドは、現在のOracleBFileインスタンスから指定されたOracleBlobオブジェクトに、指定された宛先オフセットを使用してデータをコピーします。
// C# public Int64 CopyTo(OracleBlob obj, Int64 dst_offset);
返される値は、コピーされたデータ量です。
ObjectDisposedException: オブジェクトがすでに破棄されています。
ArgumentOutOfRangeException: dst_offsetが0より小さいです。
InvalidOperationException: この例外は、次の条件のいずれかに該当する場合にスローされます。
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: この例外は、次の条件のいずれかに該当する場合にスローされます。
dst_offsetがOracleBlobデータの終わりを超えている場合、dst_offsetと一致するまでOracleBlobに空白が書き込まれます。
オフセットは0ベースです。この操作では文字の変換は実行されません。
指定されたオブジェクトおよび現在のインスタンスは、同じ接続、つまり同じOracleConnectionオブジェクトを使用している必要があります。
このインスタンス・メソッドは、現在のOracleBFileインスタンスから指定されたOracleClobオブジェクトにデータをコピーします。
// C# public Int64 CopyTo(OracleClob obj);
返される値は、コピーされたデータ量です。
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: この例外は、次の条件のいずれかに該当する場合にスローされます。
指定されたオブジェクトおよび現在のインスタンスは、同じ接続、つまり同じOracleConnectionオブジェクトを使用している必要があります。
このインスタンス・メソッドは、現在のOracleBFileインスタンスから指定されたOracleClobオブジェクトに、指定された宛先オフセットを使用してデータをコピーします。
// C# public Int64 CopyTo(OracleClob obj, Int64 dst_offset);
コピーされたデータ量
ObjectDisposedException: オブジェクトがすでに破棄されています。
ArgumentOutOfRangeException: dst_offsetが0より小さいです。
InvalidOperationException: この例外は、次の条件のいずれかに該当する場合にスローされます。
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: この例外は、次の条件のいずれかに該当する場合にスローされます。
dst_offsetが現在のOracleClobデータの終わりを超えている場合、dst_offsetと一致するまでOracleClobに空白が書き込まれます。
オフセットは0ベースです。この操作では文字の変換は実行されません。
指定されたオブジェクトおよび現在のインスタンスは、同じ接続、つまり同じOracleConnectionオブジェクトを使用している必要があります。
このインスタンス・メソッドは、このオブジェクトによって割り当てられたリソースを解放します。
// C# public void Dispose();
IDisposable
引き続きアクセスできるプロパティもありますが、その値は保証されない場合があります。リソースは解放されているため、メソッドのコールにより例外が発生することがあります。オブジェクトは、破棄後に再利用することはできません。
このインスタンス・メソッドは、LOB参照を比較します。
// C# public bool IsEqual(OracleBFile obj);
現在のOracleBFileおよび指定されたOracleBFileオブジェクトが同じ外部LOBを参照している場合、trueを返します。それ以外の場合、falseを返します。
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: OracleConnectionがオープンされていないか、オブジェクトの存続期間中にクローズされました。
このメソッドは、2つのOracleBFileオブジェクトが==またはEquals()に対してfalseを返す場合でもtrueを返すことがあります。これは、2つの異なるOracleBFileインスタンスが同じ外部LOBを参照できるためです。
指定されたオブジェクトおよび現在のインスタンスは、同じ接続、つまり同じOracleConnectionオブジェクトを使用している必要があります。
このインスタンス・メソッドは、FileNameおよびDirectoryNameによって指定されたBFILEをオープンします。
// C# public void OpenFile();
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: OracleConnectionがオープンされていないか、オブジェクトの存続期間中にクローズされました。
Compare()、CopyTo()、Read()およびSearch()などの多くの操作では、その操作の前にOpenFileを使用してBFILEがオープンされている必要があります。
オープンされたBFILEでOpenFileをコールすることはできません。
Streamをオーバーライドします。
このインスタンス・メソッドは、指定されたバイト数をOracleBFileインスタンスから読み込み、バッファに移入します。
// C# public override int Read(byte[ ] buffer, int offset, int count);
返される値は、BFILE、つまり外部LOBから読み込まれたバイト数を示します。
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: OracleConnectionがオープンされていないか、オブジェクトの存続期間中にクローズされました。
ArgumentOutOfRangeException: offsetパラメータまたはcountパラメータのいずれかが0より小さい、offsetがbuffer.Length以上、offsetおよびcountの両方がbuffer.Lengthより大きいのいずれかに該当しています。
LOBデータは、Positionプロパティによって指定された位置から読込みが開始されます。
// C# ... byte buffer = new byte[1024]; int bufferOffset = 10; int amountToBeRead = 10; // Read some data int byteRead = oraBFile.Read(buffer, bufferOffset, amountToBeRead); ...
このインスタンス・メソッドは、OracleBFileの現在のインスタンスでバイナリ・パターンを検索します。
// C# public int Search(byte[ ] val, Int64 offset, Int64 nth);
val
検索されるバイナリ・パターン。
offset
0ベースのオフセット(バイト)。ここからOracleBFileの検索が開始されます。
nth
一致の特定の出現(1ベース)。これに対してオフセットが返されます。
一致のnth番目の出現に対する、一致パターンの開始の絶対オフセット(バイト)を返します。それ以外の場合、0を返します。
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: OracleConnectionがオープンされていないか、オブジェクトの存続期間中にクローズされました。
ArgumentOutOfRangeException: offsetが0より小さい、nthが0以下、val.Lengthが16383より大きい、nthがOracleBFile.MaxSize以上、offsetがOracleBFile.MaxSize以上のいずれかに該当しています。
検索パターンの制限は16383バイトです。
// C# ... // Search for the 2nd occurrence of a byte pattern '123' // from oraBFile starting at offset 1 byte[] pattern = new byte[3] { 1,2,3 }; int positionFound = oraBFile.Search(pattern, 1, 2); ...
Streamをオーバーライドします。
このインスタンス・メソッドは、現在のLOBストリームに位置を設定します。
// C# public override int64 Seek(Int64 offset, SeekOrigin origin);
位置を示すInt64を返します。
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: OracleConnectionがオープンされていないか、オブジェクトの存続期間中にクローズされました。
offsetが負の場合、新しい位置はoriginによって指定された位置よりoffsetによって指定されたバイト数分だけ前に位置します。
offsetが0の場合、新しい位置はoriginによって指定された位置です。
offsetが正の場合、新しい位置はoriginによって指定された位置よりoffsetによって指定されたバイト数分だけ後に位置します。
SeekOrigin.Beginはストリームの開始を指定します。
SeekOrigin.Currentはストリーム内の現在の位置を指定します。
SeekOrigin.Endはストリームの終了を指定します。
// C# ... // Set the Position to 5 bytes (with respect to SeekOrigin.Begin), read 10 bytes // out, and put the data in a buffer with offset = 10 bytes byte buffer = new byte[1024]; int bufferOffset = 10; int amountToBeRead = 10; // Seek int newPosition = oraBFile.Seek(5, SeekOrigin.Begin); // Read some data int byteRead = oraBFile.Read(buffer, bufferOffset, amountToBeRead); ...
|
|
![]() Copyright © 2002, 2003 Oracle Corporation. All Rights Reserved. |
|