OracleBulkCopyオブジェクトは別のデータ・ソースからOracle表にデータを効率的に一括ロードまたはコピーします。
クラスの継承
System.Object
System.OracleBulkCopy
宣言
// C# public sealed class OracleBulkCopy : IDisposable
スレッド安全性
パブリック静的メソッドはスレッドセーフですが、インスタンス・メソッドではスレッド安全性は保証されません。
備考
OracleBulkCopyクラスは、Oracle Database表にのみデータを書き込む際に使用できます。ただし、データ・ソースに制限はありません。データがDataTableインスタンスにロードされるか、IDataReaderインスタンスで読込み可能であるかぎりデータ・ソースは使用されます。
要件
ネームスペース: Oracle.DataAccess.Client
アセンブリ: Oracle.DataAccess.dll
ODP.NETのバージョン: ODP.NET for .NET Framework 2.0またはODP.NET for .NET Framework 4
OracleBulkCopyメンバーは次の表にリストされています。
OracleBulkCopyコンストラクタ
OracleBulkCopyコンストラクタを、表17-1にリストします。
OracleBulkCopyプロパティ
OracleBulkCopyプロパティを、表17-2にリストします。
表17-2 OracleBulkCopyプロパティ
| プロパティ | 説明 |
|---|---|
|
|
バッチとしてデータベースに送信される行数を指定します |
|
|
一括コピー操作の動作を識別する |
|
|
中断される前に一括コピー操作が完了するまでの秒数を指定します |
|
|
データ・ソースと保存先表間の列マッピングを指定します |
|
|
Oracle Databaseが一括コピー操作の実行に使用する |
|
|
データがロードされるデータベース表を指定します |
|
|
通知イベントが生成される前に処理された行数を定義します |
OracleBulkCopyパブリック・メソッド
OracleBulkCopyパブリック・メソッドを、表17-3にリストします。
表17-3 OracleBulkCopyパブリック・メソッド
| メソッド | 説明 |
|---|---|
|
|
|
|
|
オブジェクトにより割り当てられたリソースまたはメモリーを解除します |
|
|
保存先表に行をコピーします |
OracleBulkCopyイベント
OracleBulkCopyイベントを、表17-4にリストします。
OracleBulkCopyコンストラクタでは、OracleBulkCopyクラスの新規インスタンスを作成します。
オーバーロード・リスト:
OracleBulkCopy(OracleConnection)
このコンストラクタでは、指定された接続とOracleBulkCopyOptionsのデフォルト値を使用してOracleBulkCopyクラスの新規インスタンスがインスタンス化されます。
このコンストラクタでは、指定されたconnectionStringおよびOracleBulkCopyOptionsのデフォルト値に基づいてOracleBulkCopyの新規インスタンスがインスタンス化されます。
OracleBulkCopy(OracleConnection, OracleBulkCopyOptions)
このコンストラクタでは、指定された接続オブジェクトとOracleBulkCopyOptionsの値を使用してOracleBulkCopyの新規インスタンスがインスタンス化されます。
OracleBulkCopy(string, OracleBulkCopyOptions)
このコンストラクタでは、指定されたconnectionStringおよびOracleBulkCopyOptionsの値に基づいてOracleConnectionの新規インスタンスがインスタンス化されます。
このコンストラクタでは、指定された接続とデフォルトのOracleBulkCopyOptionsの列挙値を使用してOracleBulkCopyクラスの新規インスタンスがインスタンス化されます。
宣言
// C#
public OracleBulkCopy(OracleConnection connection);
パラメータ
connection
一括コピー操作を実行するOracleConnectionのオープン・インスタンス。
例外
ArgumentNullException - connectionパラメータがNULLです。
InvalidOperationException - 接続がオープン状態ではありません。
備考
このコンストラクタに渡される接続オブジェクトはオープンされている必要があります。OracleBulkCopyインスタンスがクローズされると、オープンのままとなります。
このコンストラクタでは、デフォルトの列挙値OracleBulkCopyOptions.Defaultが使用されます。
Connectionプロパティは指定した接続に設定されます。
このコンストラクタでは、指定されたconnectionStringに基づいて最初にOracleConnectionオブジェクトを作成し、次にOracleConnectionオブジェクトおよびOracleBulkCopyOptionsデフォルト値を使用して新規のOracleBulkCopyを初期化して、OracleBulkCopyクラスの新規インスタンスがインスタンス化されます。
宣言
// C#
public OracleBulkCopy(string connectionString);
パラメータ
connectionString
Oracle Databaseへの接続および一括コピー操作の実行に使用される接続情報。
例外
ArgumentNullException - connectionStringパラメータがNullです。
ArgumentException - connectionStringパラメータが空です。
備考
WriteToServerメソッドは、接続がまだオープンでない場合に接続を開きます。OracleBulkCopyインスタンスがクローズされると、接続も自動的にクローズされます。
このコンストラクタでは、デフォルトの列挙値OracleBulkCopyOptions.Defaultが使用されます。
Connectionプロパティは、指定したconnectionStringを使用して初期化されるOracleConnectionオブジェクトに設定されます。
このコンストラクタでは、指定された接続オブジェクトとOracleBulkCopyOptionsの値を使用してOracleBulkCopyの新規インスタンスがインスタンス化されます。
宣言
// C# public OracleBulkCopy(OracleConnection connection, OracleBulkCopyOptions copyOptions);
パラメータ
connection
一括コピー操作を実行するOracleConnectionオブジェクトのオープン・インスタンス。
copyOptions
OracleBulkCopyオブジェクトの動作を識別するOracleBulkCopyOptionsの列挙値の組合せ。
例外
ArgumentNullException - connectionパラメータがNULLです。
InvalidOperationException - 接続がオープン状態ではありません。
備考
このコンストラクタに渡される接続はオープンされている必要があります。OracleBulkCopyインスタンスがクローズされると、オープンのままとなります。
Connectionプロパティは指定した接続に設定されます。
このコンストラクタでは、指定されたconnectionStringに基づいて最初にOracleConnectionオブジェクトを作成し、次にOracleConnectionオブジェクトおよび指定されたOracleBulkCopyOptionsの列挙値を使用して新規のOracleBulkCopyを初期化して、OracleBulkCopyクラスの新規インスタンスがインスタンス化されます。
宣言
// C# public OracleBulkCopy(string connectionString, OracleBulkCopyOptions copyOptions);
パラメータ
connectionString
一括コピー操作を実行するためにOracle Databaseに接続する際に使用される接続情報。
copyOptions
一括コピー操作の動作を識別するOracleBulkCopyOptionsの列挙値の組合せ。
例外
ArgumentNullException - connectionStringはNullです。
ArgumentException - connectionStringパラメータが空です。
備考
このコンストラクタでは、OracleConnectionクラスの新規インスタンスを使用してOracleBulkCopyクラスの新規インスタンスを初期化します。OracleBulkCopyインスタンスはcopyOptionsパラメータで指定されたオプションに従って動作します。
OracleBulkCopyインスタンスがクローズされると、接続も自動的にクローズされます。
Connectionプロパティは、指定したconnectionStringを使用して初期化されるOracleConnectionオブジェクトに設定されます。
OracleBulkCopyプロパティを、表17-5にリストします。
表17-5 OracleBulkCopyプロパティ
| プロパティ | 説明 |
|---|---|
|
|
バッチとしてデータベースに送信される行数を指定します |
|
|
一括コピー操作の動作を識別する |
|
|
中断される前に一括コピー操作が完了するまでの秒数を指定します |
|
|
データ・ソースと保存先表間の列マッピングを指定します |
|
|
Oracle Databaseが一括コピー操作の実行に使用する |
|
|
データがロードされるデータベース表を指定します |
|
|
通知イベントが生成される前に処理された行数を定義します |
このプロパティは、バッチとしてデータベースに送信される行数を指定します。
宣言
// C#
public int BatchSize {get; set;}
プロパティ値
バッチとしてデータベースに送信される行数の整数値。
例外
ArgumentOutOfRangeException - バッチ・サイズがゼロ未満です。
備考
デフォルト値はゼロで、複数のバッチでは行はデータベースに送信されないことを示します。行セット全体が1回のバッチで送信されます。
バッチは、BatchSizeの行数が処理されるか、データベースに送信する行がなくなると完了します。
BatchSize > 0で、UseInternalTransaction一括コピー・オプションが指定されていると、各一括コピー操作のバッチがトランザクション内に発生します。一括コピー操作の実行に使用される接続がすでにトランザクションの一部である場合、InvalidOperationException例外が発生します。
BatchSize > 0でUseInternalTransactionオプションが指定されていない場合は、行はサイズBatchSizeの複数のバッチではデータベースに送信されませんが、トランザクション関連のアクションは実行されません。
BatchSizeプロパティの設定はいつでも可能です。一括コピーがすでに実行中である場合、現在のバッチ・サイズは前のバッチ・サイズによって決定されます。後続のバッチには新規のバッチ・サイズが使用されます。
BatchSizeプロパティが最初はゼロで、WriteToServer操作の実行中に変更された場合、その操作は単一バッチとしてデータにロードされます。同じOracleBulkCopyインスタンス上で実行される次回以降のWriteToServer操作では、新規のBatchSizeが使用されます。
このプロパティはOracleBulkCopyOptionsの列挙値を指定し、一括コピー操作の動作を決定します。
宣言
// C#
public OracleBulkCopyOptions BulkCopyOptions {get; set;}
プロパティ値
一括コピー操作の動作を定義するOracleBulkCopyOptionsの列挙オブジェクト。
例外
ArgumentNullException - 一括コピー・オプション・セットはNULLです。
備考
このプロパティのデフォルト値はOracleBulkCopyOptions.Defaultの値です。このプロパティは、一括コピー操作のバッチ間の一括コピー・オプションの変更に使用できます。
このプロパティは、中断される前に一括コピー操作が完了するまでの秒数を指定します。
宣言
// C#
public int BulkCopyTimeout {get; set;}
プロパティ値
一括コピー操作がタイムアウトした後の秒数の整数値。
例外
ArgumentOutOfRangeException - タイムアウト値はゼロ未満に設定されています。
備考
デフォルト値は30秒です。
BatchSize>0の場合、前のバッチでデータベースに送信された行はコミットされたままです。現在のバッチで処理される行はデータベースに送信されません。BatchSize=0である場合データベースに送信される行はありません。
このプロパティは、データ・ソースと保存先表間の列マッピングを指定します。
宣言
// C#
public OracleBulkCopyColumnMappingCollection ColumnMappings {get;}
プロパティ値
ソースと保存先表間の列マッピングを定義するOracleBulkCopyColumnMappingCollectionオブジェクト。
備考
ColumnMappingsコレクションは、データ・ソースおよび保存先表がそれぞれ同じ列数で、各ソース列の順序位置が対応する保存先列の順序位置に一致する場合は必要ありません。しかし、列の数が違ったり順序位置が一致しない場合は、データが正しい列にコピーされるか確認するためにColumnMappingsコレクションを使用する必要があります。
一括コピー操作の実行中は、このコレクションにアクセスはできますが変更はできません。
デフォルトでは、このプロパティは列マッピングの空のコレクションを指定します。
このプロパティは、Oracle Databaseが一括コピー操作の実行に使用するOracleConnectionオブジェクトを指定します。
宣言
// C#
public OracleConnection Connection {get; }
プロパティ値
一括コピー操作に使用されるOracleConnectionオブジェクト。
備考
OracleBulkCopyオブジェクトが接続文字列を使用して初期化されると、このプロパティによってOracleBulkCopyで構成される接続が取得されます。
このプロパティは、データがロードされるデータベース表を指定します。
宣言
// C#
public string DestinationTableName {get; set;}
プロパティ値
保存先表名を識別する文字列値。
例外
ArgumentNullException - 保存先表名のセットがNullです。
ArgumentException - 保存先表名が空です。
備考
DestinationTableNameがWriteToServer操作が実行中に変更されると、その変更は現在の操作には影響しません。新規のDestinationTableName値は次回のWriteToServerメソッドのコール時に使用されます。
このプロパティは通知イベントが生成される前に処理された行数を定義します。
宣言
// C#
public int NotifyAfter {get; set;}
プロパティ値
通知イベントが発生するまでに処理対象として指定された行数の整数値。
例外
ArgumentOutOfRangeException - プロパティ値がゼロ未満の数値に設定されています。
備考
このプロパティのデフォルト値はゼロで、通知イベントが生成されないことを示します。
このプロパティは、一括コピー操作の進行を表示するユーザー・インタフェース・コンポネントで取得されます。NotifyAfterプロパティの設定は一括コピー操作中であってもいつでも可能です。変更は、同じインスタンスでの次回の通知および次回の操作から有効となります。
OracleBulkCopyメソッドを、表17-6にリストします。
表17-6 OracleBulkCopyパブリック・メソッド
| メソッド | 説明 |
|---|---|
|
|
|
|
|
オブジェクトにより割り当てられたリソースまたはメモリーを解除します |
|
|
保存先表に行をコピーします |
このメソッドは、OracleBulkCopyインスタンスをクローズします。
宣言
// C# public void Close();
例外
InvalidOperationException - CloseメソッドはOracleRowsCopiedイベントからコールされました。
備考
CloseメソッドがOracleBulkCopyオブジェクトでコールされると、後続の操作は行われません。WriteToServerメソッドをコールしてInvalidOperationExceptionをスローします。接続がOracleBulkCopyオブジェクトによってオープンされている、つまり、接続文字列を取得するコンストラクタによってOracleBulkCopyオブジェクトが作成された場合は、Closeメソッドによって接続がクローズされます。
このメソッドでは、オブジェクトにより割り当てられたリソースまたはメモリーを解除します。
宣言
// C# public void Dispose();
実装
IDisposable
備考
DisposeメソッドがOracleBulkCopyオブジェクトでコールされると、次の操作は行われません。接続がOracleBulkCopyオブジェクトによってオープンされている、つまり、接続文字列を取得するコンストラクタによってOracleBulkCopyオブジェクトが作成された場合は、接続がクローズされます。
WriteToServerは保存先表に行をコピーします。
オーバーロード・リスト:
このメソッドでは、指定されたDataRow配列から、OracleBulkCopyオブジェクトのDestinationTableNameプロパティによって指定された保存先表にすべての行がコピーされます。
このメソッドでは、指定されたDataTableのすべての行が、OracleBulkCopyオブジェクトのDestinationTableNameプロパティによって指定された保存先表にコピーされます。
このメソッドでは、指定されたIDataReaderのすべての行が、OracleBulkCopyオブジェクトのDestinationTableNameプロパティによって指定された保存先表にコピーされます。
WriteToServer(DataTable, DataRowState)
このメソッドでは、指定されたDataTableの指定された行の状態に一致する行が、OracleBulkCopyオブジェクトのDestinationTableNameプロパティによって指定された保存先表にコピーされます。
WriteToServer(OracleRefCursor)
このメソッドでは、指定されたOracleRefCursorから、OracleBulkCopyオブジェクトのDestinationTableNameプロパティによって指定された保存先表にすべての行がコピーされます。
このメソッドでは、指定されたDataRow配列から、OracleBulkCopyオブジェクトのDestinationTableNameプロパティによって指定された保存先表にすべての行がコピーされます。
宣言
// C#
public void WriteToServer(DataRow[] rows);
パラメータ
rows
保存先表にコピーするDataRowオブジェクトの配列。
例外
ArgumentNullException - rowsパラメータがNullです。
InvalidOperationException - 接続がオープン状態ではありません。
備考
ColumnMappingsコレクションはDataRow列から保存先データベース表にマップされます。
このメソッドでは、指定されたDataTableのすべての行が、OracleBulkCopyオブジェクトのDestinationTableNameプロパティによって指定された保存先表にコピーされます。
宣言
// C#
public void WriteToServer(DataTable table);
パラメータ
table
保存先表にコピーする行を含むソースのDataTable。
例外
ArgumentNullException - tableパラメータがNullです。
InvalidOperationException - 接続がオープン状態ではありません。
備考
DataTable内の行は、削除されたものを除いてすべて保存先表にコピーされます。
ColumnMappingsコレクションはDataTable列から保存先データベース表にマップされます。
このメソッドでは、指定されたIDataReaderのすべての行が、OracleBulkCopyオブジェクトのDestinationTableNameプロパティによって指定された保存先表にコピーされます。
宣言
// C#
public void WriteToServer(IDataReader reader);
パラメータ
reader
保存先表にコピーする行を含むIDataReaderインスタンス。
例外
ArgumentNullException - readerパラメータがNullです。
InvalidOperationException - 接続がオープン状態ではありません。
備考
一括コピー操作はデータ・リーダーの次に使用可能な行で開始します。通常、ExecuteReaderメソッドへのコールによって戻されるreaderは、次の行が最初の行になるようにWriteToServerメソッドに渡されます。複数の結果セットをコピーするには、アプリケーションはreaderでNextResultをコールし、WriteToServerメソッドを再コールする必要があります。
このWriteToServerメソッドは、reader.Readを内部でコールしてソース行を取得するように、リーダーの状態を変更します。このため、WriteToServer操作が完了すると、結果セットの最後はreaderとなります。
ColumnMappingsコレクションはデータ・リーダー列から保存先データベース表にマップされます。
このメソッドでは、指定されたDataTableの指定された行の状態に一致する行が、OracleBulkCopyオブジェクトのDestinationTableNameプロパティによって指定された保存先表にコピーされます。
宣言
// C# public void WriteToServer(DataTable table, DataRowState rowState);
パラメータ
table
保存先表にコピーする行を含むDataTable。
rowState
DataRowStateの列挙値。行の状態に一致する行のみ保存先にコピーされます。
例外
ArgumentNullException - tableまたはrowStateパラメータがNullです。
InvalidOperationException - 接続がオープン状態ではありません。
備考
DataTable内の行がrowState引数に示されている状態で、削除されていない場合のみ、保存先表にコピーされます。
ColumnMappingsコレクションはDataTable列から保存先データベース表にマップされます。
このメソッドでは、指定されたOracleRefCursorから、OracleBulkCopyオブジェクトのDestinationTableNameプロパティによって指定された保存先表にすべての行がコピーされます。
宣言
// C#
public void WriteToServer(OracleRefCursor refCursor);
パラメータ
refCursor
保存先表にコピーする行を含むOracleRefCursorオブジェクト。
例外
ArgumentNullException - refCursorパラメータがNullです
InvalidOperationException - 接続がオープン状態ではありません。
備考
ColumnMappingsコレクションはOracleRefCursor列から保存先データベース表にマップされます。
OracleBulkCopyイベントを、表17-7にリストします。
このイベントは、OracleBulkCopy.NotifyAfterプロパティで指定された行数が処理されるたびにトリガーされます。
宣言
// C# public event OracleRowsCopiedEventHandler OracleRowsCopied;
例外
InvalidOperationException - Closeメソッドはこのイベントでコールされます。
備考
このイベントはNotifyAfterプロパティで指定された行数が処理されると発生します。これは、行がデータベースに送信されるかコミットされることを示すものではありません。
このイベントからの操作を取り消すには、OracleRowsCopiedEventArgsクラスのAbortプロパティを使用します。