| Oracle® Data Provider for .NET開発者ガイド ODAC 12c リリース4 (12.1.0.2) for Microsoft Windows E72575-01 | 
 | 
|  前 |  次 | 
OracleBlobオブジェクトは、BLOBデータへの参照が含まれるオブジェクトです。このオブジェクトは、BLOBに対して操作を実行するためのメソッドを提供します。
クラスの継承
System.Object
  System.MarshalByRefObject
    System.IO.Stream
      Oracle.DataAccess.Types.OracleBlob
宣言
// C# public sealed class OracleBlob : 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.6 | 4.0, 4.5, 4.6 | 
スレッド安全性
パブリック静的メソッドはスレッドセーフですが、インスタンス・メソッドではスレッド安全性は保証されません。
例
// C#
 
using System;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
 
class OracleBlobSample
{
  static void Main()
  {
    string constr = "User Id=scott;Password=tiger;Data Source=oracle";
    OracleConnection con = new OracleConnection(constr);
    con.Open();
 
    OracleBlob blob = new OracleBlob(con);
      
    // Write 4 bytes from writeBuffer, starting at buffer offset 0
    byte[] writeBuffer = new byte[4] {1, 2, 3, 4};
    blob.Write(writeBuffer, 0, 4);    
 
    // Append first 2 bytes from writeBuffer {1, 2} to the oracleBlob
    blob.Append(writeBuffer, 0, 2);
 
    // Prints "blob.Length  = 6"
    Console.WriteLine("blob.Length  = " + blob.Length);
 
    // Reset the Position for the Read
    blob.Position = 0;
 
    // Read 6 bytes into readBuffer, starting at buffer offset 0
    byte[] readBuffer = new byte[6];       
    int bytesRead = blob.Read(readBuffer, 0, 6);
    
    // Prints "bytesRead    = 6"
    Console.WriteLine("bytesRead    = " + bytesRead);    
 
    // Prints "readBuffer   = 123412"
    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 '12'
    // starting from byte offset 0 in the OracleBlob
    byte[] pattern = new byte[2] {1, 2};
    long posFound = blob.Search(pattern, 0, 2);
 
    // Prints "posFound     = 5" 
    Console.WriteLine("posFound     = " + posFound);
 
    // Erase 4 bytes of data starting at byte offset 1
    // Sets bytes to zero
    blob.Erase(1, 4);
 
    byte[] erasedBuffer = blob.Value;    
 
    //Prints "erasedBuffer = 100002"
    Console.Write("erasedBuffer = ");
    for(int index = 0; index < erasedBuffer.Length; index++)
    {
      Console.Write(erasedBuffer[index]);
    }
    Console.WriteLine();
 
    blob.Close();
    blob.Dispose();
 
    con.Close();
    con.Dispose();
  }
}
OracleBlobメンバーは次の表にリスト表示されています。
OracleBlobコンストラクタ
OracleBlobコンストラクタを、表13-10にリストします。
OracleBlob静的フィールド
OracleBlob静的フィールドを、表13-11にリストします。
表13-11 OracleBlob静的フィールド
| フィールド | 説明 | 
|---|---|
|  | 
 | 
|  | 
 | 
OracleBlob静的メソッド
OracleBlob静的メソッドを、表13-12にリストします。
OracleBlobインスタンス・プロパティ
OracleBlobインスタンス・プロパティを、表13-13にリストします。
表13-13 OracleBlobインスタンス・プロパティ
| プロパティ | 説明 | 
|---|---|
|  | LOBストリームが読取り可能かどうかを示します | 
|  | 順方向および逆方向検索操作を実行するかどうかを示します | 
|  | LOBオブジェクトが書込みをサポートしているかどうかを示します | 
|  | 
 | 
|  | 
 | 
|  | 
 | 
|  | 現行インスタンスにNULL値があるかどうかを示します | 
|  | 現行インスタンスが一時 | 
|  | 
 | 
|  | パフォーマンスを向上させるため、読取りおよび書込み操作で使用する必要のある、最適なデータ・バッファ長(またはその倍数)を示します。 | 
|  | LOBストリームの現行の読取りまたは書込み位置を示します | 
|  | データを | 
OracleBlobインスタンス・メソッド
OracleBlobインスタンス・メソッドを、表13-14にリストします。
表13-14 OracleBlobインスタンス・メソッド
| メソッド | 説明 | 
|---|---|
|  | 指定されたデータを現行の | 
|  | 
 | 
| 
 | 
 | 
| 
 | 
 | 
|  | 
 | 
|  | 現行のストリームをクローズし、それに関連するリソースを解除します | 
|  | 現行インスタンスが参照するデータと指定されたオブジェクトのデータを比較します | 
|  | 現行の | 
| 
 | 
 | 
|  | このオブジェクトによって割り当てられたリソースを解除します | 
|  | 現行の | 
| 
 | 
 | 
| 
 | 
 | 
| 
 | 
 | 
|  | データを消去します(オーバーロード) | 
|  | サポート対象外 | 
| 
 | 
 | 
| 
 | 
 | 
| 
 | 
 | 
| 
 | 
 | 
|  | 2つの | 
|  | ODP.NET LOBタイプのインスタンスから指定バイト数を読み取り、 | 
| 
 | 
 | 
|  | 
 | 
|  | 現行のLOBストリームに位置を設定します | 
|  | 
 | 
| 
 | 
 | 
|  | 指定されたバッファを | 
| 
 | 
 | 
OracleBlobコンストラクタを、表13-10にリストします。
オーバーロード・リスト:
このコンストラクタでは、一時BLOBにバインドされたOracleBlobクラスのインスタンスをOracleConnectionオブジェクトとともに作成します。
OracleBlob(OracleConnection, bool)
このコンストラクタでは、一時BLOBにバインドされたOracleBlobクラスのインスタンスを、OracleConnectionオブジェクトおよびキャッシング用のブール値とともに作成します。
このコンストラクタでは、一時BLOBにバインドされたOracleBlobクラスのインスタンスをOracleConnectionオブジェクトとともに作成します。
宣言
// C#
public OracleBlob(OracleConnection con);
パラメータ
con
OracleConnectionオブジェクト
例外
InvalidOperationException - OracleConnectionはオープンされていません。
備考
接続は、アプリケーションによって明示的にオープンされる必要があります。OracleBlobでは、接続を暗黙的にオープンしません。
一時BLOBでは、指定された接続を使用してBLOBデータを格納します。このコンストラクタでは、キャッシングをオンにしません。
このコンストラクタでは、一時BLOBにバインドされたOracleBlobクラスのインスタンスを、OracleConnectionオブジェクトおよびキャッシング用のブール値とともに作成します。
宣言
// C# public OracleBlob(OracleConnection con, bool bCaching);
パラメータ
con
OracleConnectionオブジェクト
bCaching
サーバー側のキャッシングを有効または無効にするフラグ
例外
InvalidOperationException - OracleConnectionはオープンされていません。
備考
接続は、アプリケーションによって明示的にオープンされる必要があります。OracleBlobでは、接続を暗黙的にオープンしません。
一時BLOBでは、指定された接続を使用してBLOBデータを格納します。bCaching入力パラメータによってサーバー側のキャッシングが使用されるかどうかが判別されます。
OracleBlob静的フィールドを、表13-15にリストします。
表13-15 OracleBlob静的フィールド
| フィールド | 説明 | 
|---|---|
|  | 
 | 
|  | 
 | 
MaxSizeフィールドでは、BLOBが保持できる最大バイト数、4,294,967,295(2^32 - 1)バイトを保持します。
宣言
// C# public static readonly Int64 MaxSize = 4294967295;
備考
このフィールドは操作が許容最大長を超えているかどうかをチェックするコードに便利です。
OracleBlobインスタンス・プロパティを、表13-17にリストします。
表13-17 OracleBlobインスタンス・プロパティ
| プロパティ | 説明 | 
|---|---|
|  | 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;}
プロパティ値
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を戻します。
このプロパティは現行インスタンスにNULL値があるかどうかを示します。
宣言
// C#
public bool IsNull{get;}
プロパティ値
現行インスタンスにNULL値がある場合は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インスタンス・メソッドを、表13-18にリストします。
表13-18 OracleBlobインスタンス・メソッド
| メソッド | 説明 | 
|---|---|
|  | 指定されたデータを現行の | 
|  | 
 | 
| 
 | 
 | 
| 
 | 
 | 
|  | 
 | 
|  | 現行のストリームをクローズし、それに関連するリソースを解除します | 
|  | 現行インスタンスが参照するデータと指定されたオブジェクトのデータを比較します | 
|  | 現行の | 
| 
 | 
 | 
|  | このオブジェクトによって割り当てられたリソースを解除します | 
|  | 現行の | 
| 
 | 
 | 
| 
 | 
 | 
| 
 | 
 | 
|  | データを消去します(オーバーロード) | 
|  | サポート対象外 | 
| 
 | 
 | 
| 
 | 
 | 
| 
 | 
 | 
| 
 | 
 | 
|  | 2つの | 
|  | ODP.NET LOBタイプのインスタンスから指定バイト数を読み取り、 | 
| 
 | 
 | 
|  | 
 | 
|  | 現行のLOBストリームに位置を設定します | 
|  | 
 | 
| 
 | 
 | 
|  | 指定されたバッファを | 
| 
 | 
 | 
Appendでは、指定されたデータを現行のOracleBlobインスタンスの最後に追加します。
オーバーロード・リスト:
このインスタンス・メソッドでは、指定されたOracleBlobオブジェクトが参照するBLOBデータを現行のOracleBlobインスタンスに追加します。
このインスタンス・メソッドでは、指定されたバイト配列バッファのデータを現行のOracleBlobインスタンスの最後に追加します。
このインスタンス・メソッドでは、指定されたOracleBlobオブジェクトが参照するBLOBデータを現行のOracleBlobインスタンスに追加します。
宣言
// C#
public void Append(OracleBlob obj);
パラメータ
obj
OracleBlobのオブジェクト
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - パラメータにオブジェクト以外の接続があるか、OracleConnectionがオープンされていないか、またはOracleConnectionが再オープンされています。
備考
キャラクタ・セット変換は行われません。
指定されたオブジェクトと現行のインスタンスには、同じ接続を使用する必要があります。つまり、同じOracleConnectionオブジェクトを使用します。
このインスタンス・メソッドでは、指定されたバイト配列バッファのデータを現行のOracleBlobインスタンスの最後に追加します。
宣言
// C# public void Append(byte[] buffer, int offset, int count);
パラメータ
buffer
バイトの配列
offset
データ読取り元バッファのゼロ・ベースのバイト・オフセット
count
追加するバイト数
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。
例
// C#
 
using System;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
 
class AppendSample
{
  static void Main()
  {
    string constr = "User Id=scott;Password=tiger;Data Source=oracle";
    OracleConnection con = new OracleConnection(constr);
    con.Open();
 
    OracleBlob blob = new OracleBlob(con);
      
    // Append 2 bytes {4, 5} to the OracleBlob
    byte[] buffer = new byte[3] {4, 5, 6};
    blob.Append(buffer, 0, 2);
 
    byte[] appendBuffer = blob.Value;
 
    // Prints "appendBuffer = 45"
    Console.Write("appendBuffer = ");
    for(int index = 0; index < appendBuffer.Length; index++)
    {
      Console.Write(appendBuffer[index]);
    }
    Console.WriteLine();
 
    blob.Close();
    blob.Dispose();
 
    con.Close();
    con.Dispose();
  }
}
このインスタンス・メソッドではBLOBをオープンします。
宣言
// C# public void BeginChunkWrite();
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。
備考
BeginChunkWriteはBLOBデータ処理前に呼び出す必要はありません。これはパフォーマンス上の理由で提供されています。
このメソッドを呼び出した後は、書き込み操作を行っても列上のドメインまたは機能ベースの索引は更新されません。索引を更新できるのは、EndChunkWriteを呼び出した後に1回のみです。
このインスタンス・メソッドではOracleBlobオブジェクトのコピーを作成します。
宣言
// C# public object Clone();
戻り値
OracleBlobオブジェクト。
実装
ICloneable
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。
備考
複製されたオブジェクトのプロパティ値は、複製元のオブジェクトのプロパティ値と同じです。
例
// C#
 
using System;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
 
class CloneSample
{
  static void Main()
  {
    string constr = "User Id=scott;Password=tiger;Data Source=oracle";
    OracleConnection con = new OracleConnection(constr);
    con.Open();
 
    OracleBlob blob1 = new OracleBlob(con);
 
    // Prints "blob1.Position = 0"
    Console.WriteLine("blob1.Position = " + blob1.Position);
    
    // Set the Position before calling Clone()
    blob1.Position = 1;
 
    // Clone the OracleBlob
    OracleBlob blob2 = (OracleBlob)blob1.Clone();
    
    // Prints "blob2.Position = 1"
    Console.WriteLine("blob2.Position = " + blob2.Position);
 
    blob1.Close();
    blob1.Dispose();
 
    blob2.Close();
    blob2.Dispose();
 
    con.Close();
    con.Dispose();
  }
}
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オブジェクトに、指定されたオフセット先とともにコピーします。
CopyTo(Int64, OracleBlob, Int64, Int64)
このインスタンス・メソッドでは、データを現行のOracleBlobインスタンスから指定されたOracleBlobオブジェクトに、指定されたソース・オフセット、オフセット先および文字数とともにコピーします。
このインスタンス・メソッドでは、現行のインスタンスから指定されたOracleBlobオブジェクトにデータをコピーします。
宣言
// C#
public Int64 CopyTo(OracleBlob obj);
パラメータ
obj
データのコピー先のOracleBlobオブジェクト
戻り値
戻り値はコピーされた数
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - この例外は次のいずれかの条件が存在する場合に表示されます。
OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされた場合
LOBオブジェクト・パラメータにオブジェクト以外の接続がある場合
備考
指定されたオブジェクトと現行のインスタンスには、同じ接続を使用する必要があります。つまり、同じOracleConnectionオブジェクトを使用します。
このインスタンス・メソッドでは、データを現行のOracleBlobインスタンスから指定された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オブジェクトを使用します。
このインスタンス・メソッドでは、データを現行の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#
 
using System;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
 
class CopyToSample
{
  static void Main()
  {
    string constr = "User Id=scott;Password=tiger;Data Source=oracle";
    OracleConnection con = new OracleConnection(constr);
    con.Open();
 
    OracleBlob blob1 = new OracleBlob(con);
    OracleBlob blob2 = new OracleBlob(con);
 
    // Write 4 bytes, starting at buffer offset 0
    byte[] buffer = new byte[4] {1, 2, 3, 4};    
    blob1.Write(buffer, 0, 4);
 
    // Copy 2 bytes from byte 0 of blob1 to byte 1 of blob2
    blob1.CopyTo(0, blob2, 1, 2);
 
    byte[] copyBuffer = blob2.Value;    
 
    //Prints "Value = 012"
    Console.Write("Value = ");
    for(int index = 0; index < copyBuffer.Length; index++)
    {
      Console.Write(copyBuffer[index]);
    }
    Console.WriteLine();
    
    blob1.Close();
    blob1.Dispose();
 
    blob2.Close();
    blob2.Dispose();
 
    con.Close();
    con.Dispose();
  }
}
このインスタンス・メソッドでは、このオブジェクトによって割り当てられたリソースを解除します。
宣言
// C# public void Dispose();
実装
IDisposable
備考
Dispose()を呼び出すと、OracleBlobのオブジェクトは初期化前の状態になります。
引き続き一部のプロパティにアクセスすることはできますが、その値は信頼できません。リソースが解除されているため、メソッドを呼び出すと例外となる可能性があります。オブジェクトは、処理後は再度使用できません。
このインスタンス・メソッドでは、現行のOracleBlobインスタンスが参照するBLOBをクローズします。
宣言
// C# public void EndChunkWrite();
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。
備考
BeginChunkWriteメソッドによって遅延する書込み操作がある場合は、ただちに索引更新が行われます。
Eraseでは、データの一部またはすべてを消去します。
オーバーロード・リスト:
このインスタンス・メソッドでは、すべてのデータを消去します。
このインスタンス・メソッドでは、指定されたデータ部分を消去します。
このインスタンス・メソッドでは、すべてのデータを消去します。
宣言
// C# public Int64 Erase();
戻り値
消去したバイト数
備考
Erase()では、すべてのデータをゼロ・バイト・フィルタと置き換えます。
このインスタンス・メソッドでは、指定されたデータ部分を消去します。
宣言
// C# public Int64 Erase(Int64 offset, Int64 amount);
パラメータ
offset
消去元のオフセット
amount
消去する数(バイト)
戻り値
消去したバイト数
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。
ArgumentOutOfRangeException - offsetまたはamountパラメータは0未満です。
備考
指定されたデータのamountをゼロ・バイト・フィルタで置き換えます。
このインスタンス・メソッドでは、2つのOracleBlobが参照するLOBデータを比較します。
宣言
// C#
public bool IsEqual(OracleBlob obj);
パラメータ
obj
OracleBlobオブジェクト。
戻り値
現行のOracleBlobおよび指定されたOracleBlobが同じLOBを参照する場合は、trueを戻します。それ以外の場合はfalseを戻します。
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。
備考
2つの異なるOracleBlobインスタンスが同じLOBを参照できるため、2つのOracleBlobオブジェクトが==またはEquals()に対してfalseを戻す場合でも、このメソッドではtrueを戻すことができます。
指定されたオブジェクトと現行のインスタンスには、同じ接続を使用する必要があります。つまり、同じOracleConnectionオブジェクトを使用します。
Streamをオーバーライドします
このインスタンス・メソッドでは、ODP.NET LOBインスタンスから指定バイト数を読み取り、bufferに移入します。
宣言
// C# public override int Read(byte[] buffer, int offset, int count);
パラメータ
buffer
移入されるバイト配列バッファ
offset
バッファに移入される開始オフセット(バイト)
count
読取りバイト数
戻り値
戻り値はLOBから読み取られるバイト数を示します。
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。
ArgumentOutOfRangeException - この例外は次のいずれかの条件が存在する場合に表示されます。
offsetまたはcountパラメータが0未満の場合
offsetがbuffer.Length以上である場合
offsetおよびcountの合計がbuffer.Lengthより大きい場合
備考
LOBデータの読取りは、Positionプロパティにより指定された位置から開始されます。
例
// C#
 
using System;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
 
class ReadSample
{
  static void Main()
  {
    string constr = "User Id=scott;Password=tiger;Data Source=oracle";
    OracleConnection con = new OracleConnection(constr);
    con.Open();
 
    OracleBlob blob = new OracleBlob(con);
      
    // Write 3 bytes, starting at buffer offset 1
    byte[] writeBuffer = new byte[4] {1, 2, 3, 4};
    blob.Write(writeBuffer, 1, 3);
 
    // Reset the Position for Read
    blob.Position = 1;
 
    // Read 2 bytes into buffer starting at buffer offset 1
    byte[] readBuffer = new byte[4];    
    int bytesRead = blob.Read(readBuffer, 1, 2);
 
    // Prints "bytesRead  = 2"
    Console.WriteLine("bytesRead  = " + bytesRead);    
 
    // Prints "readBuffer = 0340"
    Console.Write("readBuffer = ");
    for(int index = 0; index <  readBuffer.Length; index++)
    {
      Console.Write(readBuffer[index]);
    }
    Console.WriteLine();
 
    blob.Close();
    blob.Dispose();
 
    con.Close();
    con.Dispose();
  }
}
このインスタンス・メソッドでは、OracleBlobの現行インスタンスのバイナリ・パターンを検索します。
宣言
// C# public Int64 Search(byte[] val, int64 offset, int64 nth);
パラメータ
val
検索対象のバイナリ・パターン
offset
OracleBlobの検索が開始される0ベース・オフセット(バイト)
nth
絶対オフセット(バイト)が戻される特定の一致状況の発生(1ベース)
戻り値
一致のnth回目の出現に対して、一致パターン(バイト表示)の起点の絶対offsetを戻します。それ以外の場合は、0が戻されます。
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。
ArgumentOutOfRangeException - この例外は次のいずれかの条件が存在する場合に表示されます。
offsetが0未満の場合
nthが0以下の場合
val.Lengthが16383より大きい場合
nthがOracleBlob.MaxSize以上の場合
offsetがOracleBlob.MaxSize以上の場合
備考
検索パターンの制限は16383バイトです。
例
// C#
 
using System;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
 
class SearchSample
{
  static void Main()
  {
    string constr = "User Id=scott;Password=tiger;Data Source=oracle";
    OracleConnection con = new OracleConnection(constr);
    con.Open();
 
    OracleBlob blob = new OracleBlob(con);
      
    // Write 7 bytes, starting at buffer offset 0
    byte[] buffer = new byte[7] {1, 2, 3, 4, 1, 2, 3};
    blob.Write(buffer, 0, 7);
      
    // Search for the 2nd occurrence of a byte pattern '23'
    // starting at offset 1 in the OracleBlob
    byte[] pattern = new byte[2] {2 ,3};
    long posFound = blob.Search(pattern, 1, 2);
 
    // Prints "posFound = 6" 
    Console.WriteLine("posFound = " + posFound);
 
    blob.Close();
    blob.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はストリームの終点を指定します。
Streamをオーバーライドします
このインスタンス・メソッドでは、BLOB値を指定された長さ(バイト表示)に切り捨てます。
宣言
// C#
public override void SetLength(Int64 newlen);
パラメータ
newlen
現行ストリームに必要な長さ(バイト)
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。
ArgumentOutOfRangeException - newlenは0未満です。
Streamをオーバーライドします
このインスタンス・メソッドでは、指定されたバッファをOracleBlobに書き込みます。
宣言
// C# public override void Write(byte[ ] buffer, int offset, int count);
パラメータ
buffer
データを指定するバイト配列buffer
offset
bufferの読取りが開始される0ベース・オフセット(バイト)
count
OracleBlobに書き込まれるデータ量(バイト)
例外
ObjectDisposedException - オブジェクトはすでに処理されています。
InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。
ArgumentOutOfRangeException - この例外は次のいずれかの条件が存在する場合に表示されます。
offsetまたはcountが0未満の場合
offsetがbuffer.Length以上である場合
offsetおよびcountの合計がbuffer.Lengthより大きい場合
備考
OracleBlobのoffset先はPositionプロパティで指定できます。
例
// C#
 
using System;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
 
class WriteSample
{
  static void Main()
  {
    string constr = "User Id=scott;Password=tiger;Data Source=oracle";
    OracleConnection con = new OracleConnection(constr);
    con.Open();
 
    OracleBlob blob = new OracleBlob(con);
    
    // Set the Position for the Write
    blob.Position = 0;  
 
    // Begin ChunkWrite to improve performance
    // Index updates occur only once after EndChunkWrite
    blob.BeginChunkWrite();
          
    // Write to the OracleBlob in 5 chunks of 2 bytes each
    byte[] b = new byte[2] {1, 2};
    for(int index = 0; index < 5; index++)
    {
      blob.Write(b, 0, b.Length);
    }
    blob.EndChunkWrite();
 
    byte[] chunkBuffer = blob.Value;
 
    // Prints "chunkBuffer = 1212121212"
    Console.Write("chunkBuffer = ");
    for(int index = 0; index < chunkBuffer.Length; index++)
    {
      Console.Write(chunkBuffer[index]);
    }
    Console.WriteLine();
 
    blob.Close();
    blob.Dispose();
 
    con.Close();
    con.Dispose();
  }
}