ヘッダーをスキップ
Oracle® Data Provider for .NET開発者ガイド
11g リリース2 (11.2.0.4)
B66456-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

OracleBlobクラス

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

クラスの継承

System.Object

  System.MarshalByRefObject

    System.IO.Stream

      Oracle.DataAccess.Types.OracleBlob

宣言

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

スレッド安全性

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

// 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();
  }
}

要件

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

アセンブリ: Oracle.DataAccess.dll

ODP.NETのバージョン: ODP.NET for .NET Framework 2.0またはODP.NET for .NET Framework 4


OracleBlobメンバー

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

OracleBlobコンストラクタ

OracleBlobコンストラクタを、表13-10にリストします。

表13-10 OracleBlobコンストラクタ

コンストラクタ 説明

OracleBlobコンストラクタ


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


OracleBlob静的フィールド

OracleBlob静的フィールドを、表13-11にリストします。

表13-11 OracleBlob静的フィールド

フィールド 説明

MaxSize


BLOBが保持できる最大バイト数、4,294,967,295(2^32 - 1)バイトを保持します

Null


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


OracleBlob静的メソッド

OracleBlob静的メソッドを、表13-12にリストします。

表13-12 OracleBlob静的メソッド

メソッド 説明

Equals

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


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

OracleBlobインスタンス・プロパティを、表13-13にリストします。

表13-13 OracleBlobインスタンス・プロパティ

プロパティ 説明

CanRead


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

CanSeek


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

CanWrite


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

Connection


BLOBデータの取得および書込みに使用するOracleConnectionを示します

IsEmpty


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

IsInChunkWriteMode


BLOBがオープンされているために索引更新が遅延するかどうかを示します

IsNull


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

IsTemporary


現行インスタンスが一時BLOBにバインドされているかどうかを示します

Length


BLOBデータのサイズを示します

OptimumChunkSize


パフォーマンスを向上させるため、読取りおよび書込み操作で使用する必要のある、最適なデータ・バッファ長(またはその倍数)を示します。

Position


LOBストリームの現行の読取りまたは書込み位置を示します

Value


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


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

OracleBlobインスタンス・メソッドを、表13-14にリストします。

表13-14 OracleBlobインスタンス・メソッド

メソッド 説明

Append


指定されたデータを現行のOracleBlobインスタンスに追加します(オーバーロード)

BeginChunkWrite


BLOBをオープンします

BeginRead

System.IO.Streamから継承します

BeginWrite

System.IO.Streamから継承します

Clone


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

Close


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

Compare


現行インスタンスが参照するデータと指定されたオブジェクトのデータを比較します

CopyTo


現行のOracleBlobインスタンスからOracleBlobオブジェクトにコピーします(オーバーロード)

CreateObjRef

System.MarshalByRefObjectからの継承

Dispose


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

EndChunkWrite


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

EndRead

System.IO.Streamから継承します

EndWrite

System.IO.Streamから継承します

Equals

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

Erase


データを消去します(オーバーロード)

Flush

サポート対象外

GetHashCode

System.Objectからの継承

GetLifetimeService

System.MarshalByRefObjectからの継承

GetType

System.Objectからの継承

InitializedLifetimeService

System.MarshalByRefObjectからの継承

IsEqual


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

Read


ODP.NET LOBタイプのインスタンスから指定バイト数を読み取り、bufferに移入します

ReadByte

System.IO.Streamから継承します

Search


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

Seek


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

SetLength


BLOB値を指定した長さに切り捨てます

ToString

System.Objectからの継承

Write


指定されたバッファをOracleBlobに書き込みます

WriteByte

System.IO.Streamから継承します



OracleBlobコンストラクタ

OracleBlobコンストラクタを、表13-10にリストします。

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

  • OracleBlob(OracleConnection)

    このコンストラクタでは、一時BLOBにバインドされたOracleBlobクラスのインスタンスをOracleConnectionオブジェクトとともに作成します。

  • OracleBlob(OracleConnection, bool)

    このコンストラクタでは、一時BLOBにバインドされたOracleBlobクラスのインスタンスを、OracleConnectionオブジェクトおよびキャッシング用のブール値とともに作成します。

OracleBlob(OracleConnection)

このコンストラクタでは、一時BLOBにバインドされたOracleBlobクラスのインスタンスをOracleConnectionオブジェクトとともに作成します。

宣言

// C#
public OracleBlob(OracleConnection con);

パラメータ

  • con

    OracleConnectionオブジェクト

例外

InvalidOperationException - OracleConnectionはオープンされていません。

備考

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

一時BLOBでは、指定された接続を使用してBLOBデータを格納します。このコンストラクタでは、キャッシングをオンにしません。

OracleBlob(OracleConnection, bool)

このコンストラクタでは、一時BLOBにバインドされたOracleBlobクラスのインスタンスを、OracleConnectionオブジェクトおよびキャッシング用のブール値とともに作成します。

宣言

// C#
public OracleBlob(OracleConnection con, bool bCaching);

パラメータ

  • con

    OracleConnectionオブジェクト

  • bCaching

    サーバー側のキャッシングを有効または無効にするフラグ

例外

InvalidOperationException - OracleConnectionはオープンされていません。

備考

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

一時BLOBでは、指定された接続を使用してBLOBデータを格納します。bCaching入力パラメータによってサーバー側のキャッシングが使用されるかどうかが判別されます。


OracleBlob静的フィールド

OracleBlob静的フィールドを、表13-15にリストします。

表13-15 OracleBlob静的フィールド

フィールド 説明

MaxSize


BLOBが保持できる最大バイト数、4,294,967,295(2^32 - 1)バイトを保持します

Null


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


MaxSize

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

宣言

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

備考

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

Null

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

宣言

// C#
public static readonly OracleBlob Null;

OracleBlob静的メソッド

OracleBlob静的メソッドを、表13-16にリストします。

表13-16 OracleBlob静的メソッド

メソッド 説明

Equals

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



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

OracleBlobインスタンス・プロパティを、表13-17にリストします。

表13-17 OracleBlobインスタンス・プロパティ

プロパティ 説明

CanRead


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

CanSeek


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

CanWrite


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

Connection


BLOBデータの取得および書込みに使用するOracleConnectionを示します

IsEmpty


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

IsInChunkWriteMode


BLOBがオープンされているために索引更新が遅延するかどうかを示します

IsNull


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

IsTemporary


現行インスタンスが一時BLOBにバインドされているかどうかを示します

Length


BLOBデータのサイズを示します

OptimumChunkSize


パフォーマンスを向上させるため、読取りおよび書込み操作で使用する必要のある、最適なデータ・バッファ長(またはその倍数)を示します。

Position


LOBストリームの現行の読取りまたは書込み位置を示します

Value


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


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;}

プロパティ値

LOBストリームが書き込み可能の場合は、trueを戻し、それ以外の場合はfalseを戻します。

Connection

このインスタンス・プロパティでは、BLOBデータの取得および書込みに使用するOracleConnectionを示します。

宣言

// C#
public OracleConnection Connection {get;}

プロパティ値

OracleConnectionのオブジェクト

例外

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

IsEmpty

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

宣言

// C#
public bool IsEmpty {get;}

プロパティ値

BLOBが空かどうかを示すbool

例外

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

IsInChunkWriteMode

このインスタンス・プロパティでは、BLOBがオープンされているために索引更新が遅延するかどうかを示します。

宣言

// C#
public bool IsInChunkWriteMode{get;}

プロパティ値

BLOBがオープンされている場合はtrueを戻し、それ以外の場合はfalseを戻します。

IsNull

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

宣言

// C#
public bool IsNull{get;}

プロパティ値

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

IsTemporary

このインスタンス・プロパティでは、現行インスタンスが一時BLOBにバインドされているかどうかを示します。

宣言

// C#
public bool IsTemporary {get;}

プロパティ値

bool

Length

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

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

宣言

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

プロパティ値

BLOBデータのサイズを示すバイト数

例外

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

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

OptimumChunkSize

このインスタンス・プロパティは、パフォーマンスを向上させるため、読取りおよび書込み操作で使用する必要のある、最適なデータ・バッファ長(またはその倍数)を示します。

宣言

// C#
public int OptimumChunkSize{get;}

プロパティ値

取得または送信する最小バイトを表す数

例外

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

Position

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

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

宣言

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

プロパティ値

読取りまたは書込み位置を示すInt64

例外

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

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

ArgumentOutOfRangeException - Position0未満です。

Value

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

宣言

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

プロパティ値

バイト配列

例外

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

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

ArgumentOutOfRangeException - Value0未満です。

備考

Positionの値はこのプロパティで使用または変更されません。このプロパティで戻すことができる最大バイト配列は2GBです。


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

OracleBlobインスタンス・メソッドを、表13-18にリストします。

表13-18 OracleBlobインスタンス・メソッド

メソッド 説明

Append


指定されたデータを現行のOracleBlobインスタンスに追加します(オーバーロード)

BeginChunkWrite


BLOBをオープンします

BeginRead

System.IO.Streamから継承します

BeginWrite

System.IO.Streamから継承します

Clone


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

Close


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

Compare


現行インスタンスが参照するデータと指定されたオブジェクトのデータを比較します

CopyTo


現行のOracleBlobインスタンスからOracleBlobオブジェクトにコピーします(オーバーロード)

CreateObjRef

System.MarshalByRefObjectからの継承

Dispose


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

EndChunkWrite


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

EndRead

System.IO.Streamから継承します

EndWrite

System.IO.Streamから継承します

Equals

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

Erase


データを消去します(オーバーロード)

Flush

サポート対象外

GetHashCode

System.Objectからの継承

GetLifetimeService

System.MarshalByRefObjectからの継承

GetType

System.Objectからの継承

InitializedLifetimeService

System.MarshalByRefObjectからの継承

IsEqual


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

Read


ODP.NET LOBタイプのインスタンスから指定バイト数を読み取り、bufferに移入します

ReadByte

System.IO.Streamから継承します

Search


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

Seek


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

SetLength


BLOB値を指定した長さに切り捨てます

ToString

System.Objectからの継承

Write


指定されたバッファをOracleBlobに書き込みます

WriteByte

System.IO.Streamから継承します


Append

Appendでは、指定されたデータを現行のOracleBlobインスタンスの最後に追加します。

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

  • Append(OracleBlob)

    このインスタンス・メソッドでは、指定されたOracleBlobオブジェクトが参照するBLOBデータを現行のOracleBlobインスタンスに追加します。

  • Append(byte[ ], int, int)

    このインスタンス・メソッドでは、指定されたバイト配列バッファのデータを現行のOracleBlobインスタンスの最後に追加します。

Append(OracleBlob)

このインスタンス・メソッドでは、指定されたOracleBlobオブジェクトが参照するBLOBデータを現行のOracleBlobインスタンスに追加します。

宣言

// C#
public void Append(OracleBlob obj);

パラメータ

  • obj

    OracleBlobのオブジェクト

例外

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

InvalidOperationException - パラメータにオブジェクト以外の接続があるか、OracleConnectionがオープンされていないか、またはOracleConnectionが再オープンされています。

備考

キャラクタ・セット変換は行われません。

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

Append(byte[ ], int, int)

このインスタンス・メソッドでは、指定されたバイト配列バッファのデータを現行の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();
  }
}

BeginChunkWrite

このインスタンス・メソッドではBLOBをオープンします。

宣言

// C#
public void BeginChunkWrite();

例外

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

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

備考

BeginChunkWriteはBLOBデータ処理前に呼び出す必要はありません。これはパフォーマンス上の理由で提供されています。

このメソッドを呼び出した後は、書き込み操作を行っても列上のドメインまたは機能ベースの索引は更新されません。索引を更新できるのは、EndChunkWriteを呼び出した後に1回のみです。

Clone

このインスタンス・メソッドでは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();
  }
}

Close

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

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

宣言

// C#
public override void Close();

Compare

このインスタンス・メソッドでは、現行のインスタンスが参照するデータと指定されたオブジェクトのデータを比較します。

宣言

// 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_offsetdst_offsetまたはamountパラメータが0より小さい場合。

備考

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

CopyTo

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

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

  • CopyTo(OracleBlob)

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

  • CopyTo(OracleBlob, Int64)

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

  • CopyTo(Int64, OracleBlob, Int64, Int64)

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

CopyTo(OracleBlob)

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

宣言

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

パラメータ

  • obj

    データのコピー先のOracleBlobオブジェクト

戻り値

戻り値はコピーされた数

例外

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

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

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

  • LOBオブジェクト・パラメータにオブジェクト以外の接続がある場合

備考

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

CopyTo(OracleBlob, Int64)

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

宣言

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

パラメータ

  • obj

    データのコピー先のOracleBlobオブジェクト

  • dst_offset

    OracleBlobオブジェクトをコピーするオフセット(バイト)

戻り値

戻り値はコピーされた数

例外

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

ArgumentOutOfRangeException - dst_offset0未満です。

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

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

  • LOBオブジェクト・パラメータにオブジェクト以外の接続がある場合

備考

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

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

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

CopyTo(Int64, OracleBlob, Int64, Int64)

このインスタンス・メソッドでは、データを現行の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_offsetdst_offsetまたはamountパラメータが0より小さい場合。

備考

dst_offsetOracleBlobデータの終点を超えている場合は、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();
  }
}

Dispose

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

宣言

// C#
public void Dispose();

実装

IDisposable

備考

Dispose()を呼び出すと、OracleBlobのオブジェクトは初期化前の状態になります。

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

EndChunkWrite

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

宣言

// C#
public void EndChunkWrite();

例外

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

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

備考

BeginChunkWriteメソッドによって遅延する書込み操作がある場合は、ただちに索引更新が行われます。

Erase

Eraseでは、データの一部またはすべてを消去します。

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

  • Erase()

    このインスタンス・メソッドでは、すべてのデータを消去します。

  • Erase(Int64, Int64)

    このインスタンス・メソッドでは、指定されたデータ部分を消去します。

Erase()

このインスタンス・メソッドでは、すべてのデータを消去します。

宣言

// C#
public Int64 Erase();

戻り値

消去したバイト数

備考

Erase()では、すべてのデータをゼロ・バイト・フィルタと置き換えます。

Erase(Int64, Int64)

このインスタンス・メソッドでは、指定されたデータ部分を消去します。

宣言

// C#
public Int64 Erase(Int64 offset, Int64 amount);

パラメータ

  • offset

    消去元のオフセット

  • amount

    消去する数(バイト)

戻り値

消去したバイト数

例外

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

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

ArgumentOutOfRangeException - offsetまたはamountパラメータは0未満です。

備考

指定されたデータのamountをゼロ・バイト・フィルタで置き換えます。

IsEqual

このインスタンス・メソッドでは、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オブジェクトを使用します。

Read

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未満の場合

  • offsetbuffer.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();
  }
}

Search

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

宣言

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

パラメータ

  • val

    検索対象のバイナリ・パターン

  • offset

    OracleBlobの検索が開始される0ベース・オフセット(バイト)

  • nth

    絶対オフセット(バイト)が戻される特定の一致状況の発生(1ベース)

戻り値

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

例外

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

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

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

  • offset0未満の場合

  • nth0以下の場合

  • val.Length16383より大きい場合

  • nthOracleBlob.MaxSize以上の場合

  • offsetOracleBlob.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();
  }
}

Seek

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はストリームの終点を指定します。

SetLength

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

このインスタンス・メソッドでは、BLOB値を指定された長さ(バイト表示)に切り捨てます。

宣言

// C#
public override void SetLength(Int64 newlen);

パラメータ

  • newlen

    現行ストリームに必要な長さ(バイト)

例外

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

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

ArgumentOutOfRangeException - newlen0未満です。

Write

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またはcount0未満の場合

  • offsetbuffer.Length以上である場合

  • offsetおよびcountの合計がbuffer.Lengthより大きい場合

備考

OracleBloboffset先は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();
  }
}