| Oracle® Data Provider for .NET開発者ガイド リリース9.2.0.4 部品番号 B13807-01 |
|
Oracle.DataAccess.Typesネームスペース(ODP.NET型)、15/19
OracleBlobオブジェクトは、BLOBデータへの参照を持つオブジェクトです。BLOBに対して操作を実行するためのメソッドを提供します。
Object
MarshalByRefObject
Stream
OracleBlob
// C# public sealed class OracleBlob : Stream, ICloneable
インスタンス・メソッドではスレッド・セーフティを保証しませんが、すべてのpublic staticメソッドはスレッド・セーフです。
[C#] ... // assume: A valid connection is made OracleBlob oraBlob = new OracleBlob(con); // Read some data ... int byteRead = oraBlob.Read(buffer, bufferOffset, amountToBeRead); // Search for the 2nd occurrence of a byte pattern '123' // from the oraBlob starting at offset 1 byte[] pattern = new byte[3] { 1,2,3 }; int positionFound = oraBlob.Search(pattern, 1, 2); // Append 2 bytes {4,5} to the oraBlob oraBlob.Append(new byte[3] {4,5,6}, 1, 2); // Write 64 bytes, starting at buffer offset 512 byte[4096] buffer = new byte[4096]; ... oraBlob.Write(buffer, 512, 64); // Erase 64 bytes of data starting at offset=1024 oraBlob.Erase(1024,64); ...
ネームスペース: Oracle.DataAccess.Types
アセンブリ: Oracle.DataAccess.dll
OracleBlobのメンバーを次の表に示します。
OracleBlobのコンストラクタを表5-156に示します。
| コンストラクタ | 説明 |
|---|---|
|
|
OracleBlobのstaticフィールドを表5-157に示します。
| フィールド | 説明 |
|---|---|
|
|
OracleBlobのstaticメソッドを表5-158に示します。
| メソッド | 説明 |
|---|---|
|
|
|
OracleBlobのインスタンス・プロパティを表5-159に示します。
OracleBlobのインスタンス・メソッドを表5-160に示します。
OracleBlobのコンストラクタは、OracleBlobクラスのインスタンスを作成します。
このコンストラクタは、OracleConnectionオブジェクトを使用し、一時BLOBにバインドされたOracleBlobクラスのインスタンスを作成します。
このコンストラクタは、OracleConnectionオブジェクトおよびキャッシュ用のブール値を使用し、一時BLOBにバインドされたOracleBlobクラスのインスタンスを作成します。
このコンストラクタは、OracleConnectionオブジェクトを使用し、一時BLOBにバインドされたOracleBlobクラスのインスタンスを作成します。
// C# public OracleBlob(OracleConnection con);
InvalidOperationException: OracleConnectionがオープンされていません。
接続は、アプリケーションで明示的にオープンされる必要があります。OracleBlobは、暗黙的に接続をオープンしません。
一時BLOBは、指定された接続を利用してBLOBデータを格納します。このコンストラクタでは、キャッシュは使用されません。
このコンストラクタは、OracleConnectionオブジェクトおよびキャッシュ用のブール値を使用し、一時BLOBにバインドされたOracleBlobクラスのインスタンスを作成します。
// C# public OracleBlob(OracleConnection con, bool bCaching);
InvalidOperationException: OracleConnectionがオープンされていません。
接続は、アプリケーションで明示的にオープンされる必要があります。OracleBlobは、暗黙的に接続をオープンしません。
一時BLOBは、指定された接続を利用してBLOBデータを格納します。bCaching入力パラメータは、サーバー側キャッシュが使用されるかどうかを判断します。
OracleBlobのstaticフィールドを表5-161に示します。
| フィールド | 説明 |
|---|---|
|
|
MaxSizeフィールドは、BLOBが保持できるバイト数の最大値を保持します。最大値は4,294,967,295(232 - 1)バイトです。
// C# public static readonly Int64 MaxSize = 4294967295;
このフィールドは、操作が許容される最大長を超えるかどうかをチェックするコードで使用すると便利です。
OracleBlobのstaticメソッドを表5-162に示します。
| メソッド | 説明 |
|---|---|
|
|
|
OracleBlobのインスタンス・プロパティを表5-163に示します。
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;}
LOBストリームを書き込むことができる場合、trueを返します。それ以外の場合、falseを返します。
このインスタンス・プロパティは、BLOBデータの取得および書込みに使用されるOracleConnectionを示します。
// C# public OracleConnection Connection {get;}
OracleConnectionのオブジェクト
ObjectDisposedException: オブジェクトがすでに破棄されています。
このインスタンス・プロパティは、BLOBが空かどうかを示します。
// C# public bool IsEmpty {get;}
BLOBが空かどうかを示すbool
ObjectDisposedException: オブジェクトがすでに破棄されています。
このインスタンス・プロパティは、索引の更新を遅延させるためにBLOBがオープンされているかどうかを示します。
// C# public bool IsInChunkWriteMode{get;}
BLOBがオープンされている場合、trueを返します。それ以外の場合、falseを返します。
このインスタンス・プロパティは、現在のインスタンスが一時BLOBにバインドされているかどうかを示します。
// C# public bool IsTemporary {get;}
bool
Streamをオーバーライドします。
このインスタンス・プロパティは、BLOBデータのサイズをバイトで示します。
// C# public override Int64 Length {get;}
BLOBデータのサイズをバイトで示す数値
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: OracleConnectionがオープンされていないか、オブジェクトの存続期間中にクローズされました。
このインスタンス・プロパティは、読込みまたは書込み操作時にサーバーから取得または送信するバイト数の最小値を示します。
// C# public int OptimumChunkSize{get;}
取得または送信するバイト数の最小値を表す数値
ObjectDisposedException: オブジェクトがすでに破棄されています。
Streamをオーバーライドします。
このインスタンス・プロパティは、LOBストリームの現在の読込みまたは書込み位置を示します。
// C# public override Int64 Position{get; set;}
読込みまたは書込み位置を示すInt64
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: OracleConnectionがオープンされていないか、オブジェクトの存続期間中にクローズされました。
ArgumentOutOfRangeException: Positionが0より小さいです。
このインスタンス・プロパティは、BLOBの最初のバイトから始まるデータをバイト配列として返します。
// C# public Byte[] Value{get;}
バイト配列
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: OracleConnectionがオープンされていないか、オブジェクトの存続期間中にクローズされました。
ArgumentOutOfRangeException: Valueが0より小さいです。
Positionの値は、このプロパティを使用しても使用または変更されません。このプロパティによって返されるバイト配列の最大長は2GBです。
OracleBlobのインスタンス・メソッドを表5-164に示します。
Appendは、指定されたデータを現在のOracleBlobインスタンスの終わりに追加します。
このインスタンス・メソッドは、指定されたOracleBlobオブジェクトによって参照されるBLOBデータを現在のOracleBlobインスタンスに追加します。
このインスタンス・メソッドは、指定されたバイト配列バッファからのデータを現在のOracleBlobインスタンスの終わりに追加します。
このインスタンス・メソッドは、指定されたOracleBlobオブジェクトによって参照されるBLOBデータを現在のOracleBlobインスタンスに追加します。
// C# public void Append(OracleBlob obj);
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: パラメータがオブジェクトとは異なる接続を使用しているか、OracleConnectionがオープンされていないか、またはOracleConnectionが再オープンされています。
キャラクタ・セットの変換は行われません。
指定されたオブジェクトおよび現在のインスタンスは、同じ接続、つまり同じOracleConnectionオブジェクトを使用している必要があります。
このインスタンス・メソッドは、指定されたバイト配列バッファからのデータを現在のOracleBlobインスタンスの終わりに追加します。
// C# public void Append(byte[] buffer, int offset, int count);
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: OracleConnectionがオープンされていないか、オブジェクトの存続期間中にクローズされました。
// C# ... // Append 2 bytes {4,5} to the oraBlob oraBlob.Append(new byte[3] {4,5,6}, 1, 2); ...
このインスタンス・メソッドは、BLOBをオープンします。
// C# public void BeginChunkWrite();
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: OracleConnectionがオープンされていないか、オブジェクトの存続期間中にクローズされました。
BeginChunkWriteは、BLOBデータを操作する前にコールする必要はありません。これはパフォーマンス上の理由で提供されています。
このメソッドがコールされると、書込み操作によって列のドメイン索引またはファンクション索引が更新されることはありません。索引の更新は、EndChunkWriteがコールされた後に1回だけ発生します。
このインスタンス・メソッドは、OracleBlobオブジェクトのコピーを作成します。
// C# public object Clone();
OracleBlobオブジェクト
ICloneable
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: OracleConnectionがオープンされていないか、オブジェクトの存続期間中にクローズされました。
クローニングされたオブジェクトは、クローニング元のオブジェクトと同じプロパティ値を持ちます。
// C# ... //Need a proper casting for the return value when cloned OracleBlob oraBlob_cloned = (OracleBlob) oraBlob.Clone(); ...
Streamをオーバーライドします。
このインスタンス・メソッドは、現在のストリームをクローズし、それに関連付けられたリソースを解放します。
// C# public override void Close();
このインスタンス・メソッドは、現在のインスタンスによって参照されるデータと指定されたオブジェクトのデータを比較します。
// C# public int Compare(Int64 src_offset, OracleBlob obj, Int64 dst_offset, Int64 amount);
src_offset
現在のインスタンスの比較開始位置(バイト)。
obj
指定されたOracleBlobオブジェクト。
dst_offset
指定されたOracleBlobの比較開始位置(バイト)。
amount
比較するバイト数。
次の数値を返します。
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: パラメータがオブジェクトとは異なる接続を使用しているか、OracleConnectionがオープンされていないか、またはOracleConnectionが再オープンされています。
ArgumentOutOfRangeException: src_offsetパラメータ、dst_offsetパラメータまたはamountパラメータが0より小さいです。
指定されたオブジェクトおよび現在のインスタンスは、同じ接続、つまり同じOracleConnectionオブジェクトを使用している必要があります。
CopyToは、現在のインスタンスから指定されたOracleBlobオブジェクトにデータをコピーします。
このインスタンス・メソッドは、現在のインスタンスから指定されたOracleBlobオブジェクトにデータをコピーします。
このインスタンス・メソッドは、現在のOracleBlobインスタンスから指定されたOracleBlobオブジェクトに、指定された宛先オフセットを使用してデータをコピーします。
このインスタンス・メソッドは、現在のOracleBlobインスタンスから指定されたOracleBlobオブジェクトに、指定されたソース・オフセット、宛先オフセットおよび文字数を使用してデータをコピーします。
このインスタンス・メソッドは、現在のインスタンスから指定されたOracleBlobオブジェクトにデータをコピーします。
// C# public Int64 CopyTo(OracleBlob obj);
返される値は、コピーされたデータ量です。
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: この例外は、次の条件のいずれかに該当する場合にスローされます。
指定されたオブジェクトおよび現在のインスタンスは、同じ接続、つまり同じOracleConnectionオブジェクトを使用している必要があります。
このインスタンス・メソッドは、現在のOracleBlobインスタンスから指定されたOracleBlobオブジェクトに、指定された宛先オフセットを使用してデータをコピーします。
// C# public Int64 CopyTo(OracleBlob obj, Int64 dst_offset);
返される値は、コピーされたデータ量です。
ObjectDisposedException: オブジェクトがすでに破棄されています。
ArgumentOutOfRangeException: dst_offsetが0より小さいです。
InvalidOperationException: この例外は、次の条件のいずれかに該当する場合にスローされます。
dst_offsetがOracleBlobデータの終わりを超えている場合、dst_offsetと一致するまでOracleBlobに空白が書き込まれます。
オフセットは0ベースです。この操作では文字の変換は実行されません。
指定されたオブジェクトおよび現在のインスタンスは、同じ接続、つまり同じOracleConnectionオブジェクトを使用している必要があります。
このインスタンス・メソッドは、現在のOracleBlobインスタンスから指定されたOracleBlobオブジェクトに、指定されたソース・オフセット、宛先オフセットおよび文字数を使用してデータをコピーします。
// C# public Int64 CopyTo(Int64 src_offset,OracleBlob obj,Int64 dst_offset,Int64 amount);
src_offset
現在のインスタンスのオフセット(バイト)。ここからデータが読み込まれます。
obj
データのコピー先となるOracleBlobオブジェクト。
dst_offset
OracleBlobオブジェクトのオフセット(バイト)。ここにデータがコピーされます。
amount
コピーされるデータ量。
返される値は、コピーされたデータ量です。
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: パラメータがオブジェクトとは異なる接続を使用しているか、OracleConnectionがオープンされていないか、またはOracleConnectionが再オープンされています。
ArgumentOutOfRangeException: src_offsetパラメータ、dst_offsetパラメータまたはamountパラメータが0より小さいです。
dst_offsetがOracleBlobデータの終わりを超えている場合、dst_offsetと一致するまでOracleBlobに空白が書き込まれます。
オフセットは0ベースです。この操作では文字の変換は実行されません。
指定されたオブジェクトおよび現在のインスタンスは、同じ接続、つまり同じOracleConnectionオブジェクトを使用している必要があります。
// C# ... // Assume you have 2 valid blobs OracleBlob src_blob = new OracleBlob(con); OracleBlob target_blob = new OracleBlob(con); // Copy 1024 bytes from src_blob (begin at offset 10) to target_blob // (starting at offset 5) src_blob.CopyTo(10, target_blob, 5, 1024); ...
このインスタンス・メソッドは、このオブジェクトによって割り当てられたリソースを解放します。
// C# public void Dispose();
IDisposable
Dispose()がコールされると、OracleBlobのオブジェクトは未初期化状態になります。
引き続きアクセスできるプロパティもありますが、その値は保証されない場合があります。リソースは解放されているため、メソッドのコールにより例外が発生することがあります。オブジェクトは、破棄後に再利用することはできません。
このインスタンス・メソッドは、現在のOracleBlobインスタンスによって参照されるBLOBをクローズします。
// C# public void EndChunkWrite();
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: OracleConnectionがオープンされていないか、オブジェクトの存続期間中にクローズされました。
索引の更新は、BeginChunkWriteメソッドによって書込み操作が遅延されるとすぐに発生します。
Eraseは、データの一部またはすべてを消去します。
このインスタンス・メソッドは、すべてのデータを消去します。
このインスタンス・メソッドは、特定の部分のデータを消去します。
このインスタンス・メソッドは、すべてのデータを消去します。
// C# public Int64 Erase();
消去されたバイト数
Erase()は、すべてのデータを0バイトの充填文字で置換します。
このインスタンス・メソッドは、特定の部分のデータを消去します。
// C# public Int64 Erase(Int64 offset, Int64 amount);
消去されたバイト数
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: OracleConnectionがオープンされていないか、オブジェクトの存続期間中にクローズされました。
ArgumentOutOfRangeException: offsetパラメータまたはamountパラメータが0より小さいです。
指定されたデータ量を0バイトの充填文字で置換します。
このインスタンス・メソッドは、2つのOracleBlobによって参照されるLOBデータを比較します。
// C# public bool IsEqual(OracleBlob obj);
現在のOracleBlobおよび指定されたOracleBlobが同じLOBを参照している場合、trueを返します。それ以外の場合、falseを返します。
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: OracleConnectionがオープンされていないか、オブジェクトの存続期間中にクローズされました。
このメソッドは、2つのOracleBlobオブジェクトが==またはEquals()に対してfalseを返す場合でもtrueを返すことができます。これは、2つの異なるOracleBlobインスタンスが同じLOBを参照できるためです。
指定されたオブジェクトおよび現在のインスタンスは、同じ接続、つまり同じOracleConnectionオブジェクトを使用している必要があります。
Streamをオーバーライドします。
このインスタンス・メソッドは、指定されたバイト数をODP.NET LOBインスタンスから読み込み、バッファに移入します。
// C# public override int Read(byte[ ] buffer, int offset, int count);
返される値は、LOBから読み込まれたバイト数を示します。
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: OracleConnectionがオープンされていないか、オブジェクトの存続期間中にクローズされました。
ArgumentOutOfRangeException: この例外は、次の条件のいずれかに該当する場合にスローされます。
LOBデータは、Positionプロパティによって指定された位置から読込みが開始されます。
// C# ... byte buffer = new byte[1024]; int bufferOffset = 10; int amountToBeRead = 10; // Read some data ... int byteRead = oraBlob.Read(buffer, bufferOffset, amountToBeRead); ...
このインスタンス・メソッドは、OracleBlobの現在のインスタンスでバイナリ・パターンを検索します。
// C# public Int64 Search(byte[] val, int64 offset, int64 nth);
val
検索されるバイナリ・パターン。
offset
0ベースのオフセット(バイト)。ここからOracleBlobが検索されます。
nth
一致の特定の出現(1ベース)。これに対して絶対オフセット(バイト)が返されます。
一致のnth番目の出現に対する、一致パターンの開始の絶対オフセット(バイト)を返します。それ以外の場合、0を返します。
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: OracleConnectionがオープンされていないか、オブジェクトの存続期間中にクローズされました。
ArgumentOutOfRangeException: この例外は、次の条件のいずれかに該当する場合にスローされます。
offsetが0より小さい場合
nthが0以下の場合
val.Lengthが16383より大きい場合
nthがOracleBlob.MaxSize以上の場合
offsetがOracleBlob.MaxSize以上の場合
検索パターンの制限は16383バイトです。
// C# ... // Search for the 2nd occurrence of a byte pattern '123' // from the oraBlob starting at offset 1 byte[] pattern = new byte[3] { 1,2,3 }; int positionFound = oraBlob.Search(pattern, 1, 2); ...
Streamをオーバーライドします。
このインスタンス・メソッドは、現在のLOBストリームに位置を設定します。
// C# public override Int64(Int64 offset, SeekOrigin origin);
位置を示すInt64を返します。
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: OracleConnectionがオープンされていないか、オブジェクトの存続期間中にクローズされました。
offsetが負の場合、新しい位置はoriginによって指定された位置よりoffsetによって指定されたバイト数分だけ前に位置します。
offsetが0の場合、新しい位置はoriginによって指定された位置です。
offsetが正の場合、新しい位置はoriginによって指定された位置よりoffsetによって指定されたバイト数分だけ後に位置します。
SeekOrigin.Beginはストリームの開始を指定します。
SeekOrigin.Currentはストリーム内の現在の位置を指定します。
SeekOrigin.Endはストリームの終了を指定します。
Streamをオーバーライドします。
このインスタンス・メソッドは、指定された長さ(バイト)にBLOB値を切り捨てます。
// C# public override void SetLength(Int64 newlen);
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: OracleConnectionがオープンされていないか、オブジェクトの存続期間中にクローズされました。
ArgumentOutOfRangeException: newlenパラメータが0より小さいです。
Streamをオーバーライドします。
このインスタンス・メソッドは、指定されたバッファをOracleBlobに書き込みます。
// C# public override void Write(byte[ ] buffer, int offset, int count);
buffer
データを提供するバイト配列バッファ。
offset
0ベースのオフセット(バイト)。ここからバッファが読み込まれます。
count
OracleBlobに書き込まれるデータ量(バイト)。
ObjectDisposedException: オブジェクトがすでに破棄されています。
InvalidOperationException: OracleConnectionがオープンされていないか、オブジェクトの存続期間中にクローズされました。
ArgumentOutOfRangeException: この例外は、次の条件のいずれかに該当する場合にスローされます。
OracleBlobの宛先オフセットは、Positionプロパティによって指定できます。
// C# ... // Begin ChunkWrite to improve performance // Index updates occur only once after EndChunkWrite oraBlob.BeginChunkWrite(); // Set the write from the beginning; oraBlob.Position = 0; // Write to the oraBlob in chunks of 10, each 1024 bytes for ( int i=0; i<10; i++ ) { byte[1024] b; b = b[0]; // some new value to be written oraBlob.Write(b, 0, b.Length); } oraBlob.EndChunkWrite(); ...
|
|
![]() Copyright © 2002, 2003 Oracle Corporation. All Rights Reserved. |
|