ヘッダーをスキップ
Oracle Data Provider for .NET開発者ガイド
11g リリース1(11.1)
E05791-01
  目次へ
目次
索引へ
索引

戻る
戻る
 
次へ
次へ
 

OracleDataAdapterクラス

OracleDataAdapterオブジェクトは、DataSetを移入し、DataSetにおける変更をOracle Databaseに反映させるデータ・プロバイダ・オブジェクトを表します。

クラスの継承

System.Object

  System.MarshalByRefObject

    System.ComponentModel.Component

      System.Data.Common.DataAdapter

        System.Data.Common.DbDataAdapter(ADO.NET 2.0のみ)

          Oracle.DataAccess.Client.OracleDataAdapter

宣言

// C#
public sealed class OracleDataAdapter : DbDataAdapter, IDbDataAdapter

スレッド安全性

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

次の例では、EMP表の更新にOracleDataAdapterおよびデータセットが使用されています。

// C#

using System;
using System.Data;
using Oracle.DataAccess.Client;

class OracleDataAdapterSample
{
  static void Main()
  {
    string constr = "User Id=scott;Password=tiger;Data Source=oracle";
    string cmdstr = "SELECT empno, sal from emp";

    // Create the adapter with the selectCommand txt and the
    // connection string
    OracleDataAdapter adapter = new OracleDataAdapter(cmdstr, constr);

    // Create the builder for the adapter to automatically generate
    // the Command when needed
    OracleCommandBuilder builder = new OracleCommandBuilder(adapter);

    // Create and fill the DataSet using the EMP
    DataSet dataset = new DataSet();
    adapter.Fill(dataset, "EMP");

    // Get the EMP table from the dataset
    DataTable table = dataset.Tables["EMP"];

    // Indicate DataColumn EMPNO is unique
    // This is required by the OracleCommandBuilder to update the EMP table
    table.Columns["EMPNO"].Unique = true;

    // Get the first row from the EMP table
    DataRow row = table.Rows[0];

    // Update the salary
    double sal = double.Parse(row["SAL"].ToString());
    row["SAL"] = sal + .01;

    // Now update the EMP using the adapter
    // The OracleCommandBuilder will create the UpdateCommand for the
    // adapter to update the EMP table
    adapter.Update(dataset, "EMP");

    Console.WriteLine("Row updated successfully");
  }
}

要件

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

アセンブリ: Oracle.DataAccess.dll

Microsoft .NET Frameworkバージョン: 1.xまたは2.0


OracleDataAdapterメンバー

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

OracleDataAdapterコンストラクタ

OracleDataAdapterコンストラクタのリストを、表5-29に示します。

表5-29 OracleDataAdapterコンストラクタ

コンストラクタ 説明

OracleDataAdapterコンストラクタ

OracleDataAdapterクラスの新規インスタンスをインスタンス化します(オーバーロード)


OracleDataAdapter静的メソッド

OracleDataAdapter静的メソッドのリストを、表5-30に示します。

表5-30 OracleDataAdapter静的メソッド

メソッド 説明

Equals

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


OracleDataAdapterプロパティ

OracleDataAdapterプロパティのリストを、表5-31に示します。

表5-31 OracleDataAdapterプロパティ

名前 説明

AcceptChangesDuringFill

System.Data.Common.DataAdapterからの継承

Container

System.ComponentModel.Componentからの継承

ContinueUpdateOnError

System.Data.Common.DataAdapterからの継承

DeleteCommand

Oracle Databaseから行を削除する、SQL文またはストアド・プロシージャ

InsertCommand

Oracle Databaseに新しい行を挿入する、SQL文またはストアド・プロシージャ

MissingMappingAction

System.Data.Common.DataAdapterからの継承

MissingSchemaAction

System.Data.Common.DataAdapterからの継承

Requery

Fillへの次コールでSelectCommandが再実行されるかどうかを決定します

ReturnProviderSpecificTypes


FillメソッドがODP.NET固有の値を戻すか、.NET共通言語仕様の値を戻すかを決定します

SafeMapping

データを保存するため、.NETタイプに結果セット内の列名間のマッピングを作成します

SelectCommand

単一または複数の結果セットを戻すSQL文またはストアド・プロシージャ

Site

System.ComponentModel.Componentからの継承

TableMappings

System.Data.Common.DataAdapterからの継承

UpdateBatchSize


バッチ処理サポートを有効または無効にする値を指定し、データベースへの1回のラウンドトリップで実行できるSQL文の数を指定します

ADO.NET 2.0準拠のODP.NETでのみサポート

UpdateCommand

DataSetからOracle Databaseへ行を更新するSQL文またはストアド・プロシージャ


OracleDataAdapterパブリック・メソッド

OracleDataAdapterパブリック・メソッドのリストを、表5-32に示します。

表5-32 OracleDataAdapterパブリック・メソッド

パブリック・メソッド 説明

CreateObjRef

System.MarshalByRefObjectからの継承

Dispose

System.ComponentModel.Componentからの継承

Equals

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

Fill

Oracle Database内のデータと一致させるため、DataSet内の行を追加またはリフレッシュします(オーバーロード)

FillSchema

System.Data.Common.DbDataAdapterからの継承

GetFillParameters

System.Data.Common.DbDataAdapterからの継承

GetHashCode

System.Objectからの継承

GetLifetimeService

System.MarshalByRefObjectからの継承

GetType

System.Objectからの継承

InitializeLifetimeService

System.MarshalByRefObjectからの継承

ToString

System.Objectからの継承

Update

System.Data.Common.DbDataAdapterからの継承


OracleDataAdapterイベント

OracleDataAdapterイベントのリストを、表5-33に示します。

表5-33 OracleDataAdapterイベント

イベント名 説明

Disposed

System.ComponentModel.Componentからの継承

FillError

System.Data.Common.DbDataAdapterからの継承

RowUpdated

このイベントは、Update()メソッドによって行が更新された場合に発生します

RowUpdating

このイベントは、データベースに行データを更新するときに発生します



OracleDataAdapterコンストラクタ

OracleDataAdapterコンストラクタは、OracleDataAdapterクラスの新規インスタンスを作成します。

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

OracleDataAdapter()

このコンストラクタは、OracleDataAdapterクラスのインスタンスを引数なしで作成します。

宣言

// C#
public OracleDataAdapter();

備考

初期値は、OracleDataAdapterプロパティに対して、次に示すように設定されています。

OracleDataAdapter(OracleCommand)

このコンストラクタは、SelectCommandとして指定されたOracleCommandOracleDataAdapterクラスのインスタンスを作成します。

宣言

// C#
public OracleDataAdapter(OracleCommand selectCommand);

パラメータ

備考

初期値は、OracleDataAdapterプロパティに対して、次に示すように設定されています。

OracleDataAdapter(string, OracleConnection)

このコンストラクタは、指定されたOracleConnectionオブジェクトおよびSelectCommandのコマンド・テキストで、OracleDataAdapterクラスのインスタンスを作成します。

宣言

// C#
public OracleDataAdapter(string selectCommandText, OracleConnection
    selectConnection);

パラメータ

備考

OracleDataAdapterは、まだオープンしていない場合、接続をオープンおよびクローズします。接続がオープンしている場合は、明示的にクローズする必要があります。

初期値は、OracleDataAdapterプロパティに対して、次に示すように設定されています。

OracleDataAdapter(string, string)

このコンストラクタは、SelectCommandの指定された接続文字列およびコマンド・テキストで、OracleDataAdapterクラスのインスタンスを作成します。

宣言

// C#
public OracleDataAdapter(string selectCommandText, string
   selectConnectionString);

パラメータ

備考

初期値は、OracleDataAdapterプロパティに対して、次に示すように設定されています。


OracleDataAdapter静的メソッド

OracleDataAdapter静的メソッドのリストを、表5-34に示します。

表5-34 OracleDataAdapter静的メソッド

メソッド 説明

Equals

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



OracleDataAdapterプロパティ

OracleDataAdapterプロパティのリストを、表5-35に示します。

表5-35 OracleDataAdapterプロパティ

名前 説明

AcceptChangesDuringFill

System.Data.Common.DataAdapterからの継承

Container

System.ComponentModel.Componentからの継承

ContinueUpdateOnError

System.Data.Common.DataAdapterからの継承

DeleteCommand

Oracle Databaseから行を削除する、SQL文またはストアド・プロシージャ

InsertCommand

Oracle Databaseに新しい行を挿入する、SQL文またはストアド・プロシージャ

MissingMappingAction

System.Data.Common.DataAdapterからの継承

MissingSchemaAction

System.Data.Common.DataAdapterからの継承

Requery

Fillへの次コールでSelectCommandが再実行されるかどうかを決定します

ReturnProviderSpecificTypes


FillメソッドがODP.NET固有の値を戻すか、.NET共通言語仕様の値を戻すかを決定します

SafeMapping

データを保存するため、.NETタイプに結果セット内の列名間のマッピングを作成します

SelectCommand

単一または複数の結果セットを戻すSQL文またはストアド・プロシージャ

Site

System.ComponentModel.Componentからの継承

TableMappings

System.Data.Common.DataAdapterからの継承

UpdateBatchSize


バッチ処理サポートを有効または無効にする値を指定し、データベースへの1回のラウンドトリップで実行できるSQL文の数を指定します

ADO.NET 2.0準拠のODP.NETでのみサポート

UpdateCommand

DataSetからOracle Databaseへ行を更新するSQL文またはストアド・プロシージャ


DeleteCommand

このプロパティは、Oracle Databaseから行を削除するSQL文またはストアド・プロシージャです。

宣言

// C#
public OracleCommand DeleteCommand {get; set;}

プロパティ値

DataSet内の削除した行に対応するOracle Databaseの表から行を削除するため、Updateコール中に使用されるOracleCommand

備考

デフォルト = null

DataSet内に主キー情報があり、かつコマンドが指定されていない場合は、OracleCommandBuilderを使用してDeleteCommandが自動的に生成されます。

InsertCommand

このプロパティは、Oracle Databaseに新しい行を挿入するSQL文またはストアド・プロシージャです。

宣言

// C#
public OracleCommand InsertCommand {get; set;}

プロパティ値

Updateコール中に使用されるOracleCommandは、DataSet内に追加された行に対応して、表に行を追加します。

備考

デフォルト = null

DataSet内に主キー情報があり、かつコマンドが指定されていない場合は、OracleCommandBuilderを使用してInsertCommandが自動的に生成されます。

Requery

このプロパティは、Fillへの次コールでSelectCommandが再実行されるかどうかを決定します。

宣言

// C#
public Boolean Requery {get; set;}

プロパティ値

Fillへの次コールでSelectCommandが再実行される場合はtrueを戻し、それ以外の場合はfalseを戻します。

ReturnProviderSpecificTypes

このプロパティは、FillメソッドがODP.NET固有の値を戻すか、.NET共通言語仕様に準拠した値を戻すかを決定します

ADO.NET 2.0準拠のODP.NETでのみサポート

宣言

// C#
public Boolean ReturnProviderSpecificTypes {get; set;}

プロパティ値

FillメソッドがODP.NET固有の値を戻すかどうかを示す値。 値がfalseの場合は、Fillメソッドが.NET共通言語仕様に準拠した値を返すことを示します。デフォルトはfalseです。

SafeMapping

このプロパティでは、データを保存するため、DataSet内の列値を表す.NETタイプに、結果セット内の列名間のマッピングを作成します。

宣言

// C#
public Hashtable SafeMapping {get; set;}

プロパティ値

ハッシュ・テーブル

備考

デフォルト = null

次のタイプのデータを保存するため、必要に応じてSafeMappingプロパティが使用されます。

詳細は、「OracleDataAdapter Safeタイプ・マッピング」の例を参照してください。

SelectCommand

このプロパティは、単一または複数の結果セットを戻すSQL文またはストアド・プロシージャです。

宣言

// C#
public OracleCommand SelectCommand {get; set;}

プロパティ値

Fillコール中にOracleCommandを使用して、選択した行をDataSetに移入します。

備考

デフォルト = null

SelectCommandで戻される行がない場合は、データセットに表は追加されず、例外も発生しません。

SELECT文がVIEWから選択される場合、FillSchema()またはMissingSchemaAction.AddWithKeyのあるFill()が起動されるときに、キー情報は取得されません。

UpdateBatchSize

このプロパティは、バッチ処理サポートを有効または無効にする値を指定し、データベースへの1回のラウンドトリップで実行できるSQL文の数を指定します。

ADO.NET 2.0準拠のODP.NETでのみサポート

宣言

// C#
public virtual int UpdateBatchSize {get; set;}

プロパティ値

バッチ・サイズを戻す整数

例外

ArgumentOutOfRangeException: 値が0未満に設定されています。

備考

大量のデータを使用して更新パッチを実行すると、「PLS-00123:プログラムが大きすぎます。」のエラーが発生する場合があります。 このエラーを回避するには、UpdateBatchSizeの値を小さくします。

変更、追加または削除したDataSet内の行ごとに、1つのSQL文がデータベースで実行されます。

値は次のとおりです。

UpdateCommand

このプロパティは、DataSetからOracle Databaseへ、行を更新するSQL文またはストアド・プロシージャです。

宣言

// C#
public OracleCommand UpdateCommand {get; set;}

プロパティ値

Oracle Database内では、Updateコール中にOracleCommandを使用して行を更新します。更新行はDataSet内で更新された行に対応しています。

備考

デフォルト = null

DataSet内に主キー情報があり、このプロパティにコマンドが指定されていない場合は、OracleCommandBuilderが使用され、UpdateCommandが自動的に生成されます。


OracleDataAdapterパブリック・メソッド

OracleDataAdapterパブリック・メソッドのリストを、表5-36に示します。

表5-36 OracleDataAdapterパブリック・メソッド

パブリック・メソッド 説明

CreateObjRef

System.MarshalByRefObjectからの継承

Dispose

System.ComponentModel.Componentからの継承

Equals

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

Fill

Oracle Database内のデータと一致させるため、DataSet内の行を追加またはリフレッシュします(オーバーロード)

FillSchema

System.Data.Common.DbDataAdapterからの継承

GetFillParameters

System.Data.Common.DbDataAdapterからの継承

GetHashCode

System.Objectからの継承

GetLifetimeService

System.MarshalByRefObjectからの継承

GetType

System.Objectからの継承

InitializeLifetimeService

System.MarshalByRefObjectからの継承

ToString

System.Objectからの継承

Update

System.Data.Common.DbDataAdapterからの継承


Fill

Fillは、指定されたDataTableまたはDataSetを移入またはリフレッシュします。

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

Fill(DataTable, OracleRefCursor)

このメソッドは、指定されたOracleRefCursorオブジェクトに行を一致させるために、指定されたDataTableに追加またはリフレッシュします。

宣言

// C#
public int Fill(DataTable dataTable, OracleRefCursor refCursor);

パラメータ

戻り値

DataTableに行数が追加またはリフレッシュされました。

例外

ArgumentNullException: dataTableまたはrefCursorパラメータがNULLです。

InvalidOperationException: OracleRefCursorはすでにデータのフェッチに使用されました。

NotSupportedException: SafeMappingタイプはサポートされていません。

備考

スキームまたは情報は、MissingSchemaAction.AddWithKeyに設定されたMissingSchemaActionFillメソッドがコールされた場合、指定されません。

Fill(DataSet, OracleRefCursor)

このメソッドは、OracleRefCursorオブジェクトに行を一致させるために、指定されたDataSetに追加またはリフレッシュします。

宣言

// C#
public int Fill(DataSet dataSet, OracleRefCursor refCursor);

パラメータ

戻り値

DataSetに追加またはリフレッシュされた行数が戻されました。

例外

ArgumentNullException: dataSetまたはrefCursorパラメータがNULLです。

InvalidOperationException: OracleRefCursorはすでにデータのフェッチに使用されました。

InvalidOperationException: OracleRefCursorはデータをフェッチする準備ができています。

NotSupportedException: SafeMappingタイプはサポートされていません。

備考

リフレッシュするDataTableがない場合、Tableと命名された新しいDataTableが指定されたOracleRefCursorオブジェクトを使用して作成または移入されました。

スキームまたは情報は、MissingSchemaAction.AddWithKeyに設定されたMissingSchemaActionFillメソッドがコールされた場合、指定されません。

Fill(DataSet, string, OracleRefCursor)

このメソッドは、DataSetの指定されたソース・テーブルに行を追加またはリフレッシュして、指定されたOracleRefCursorオブジェクトに行を一致させます。

宣言

// C#
public int Fill(DataSet dataSet, string srcTable, OracleRefCursor
   refCursor);

パラメータ

戻り値

DataSetに追加またはリフレッシュされた行数を戻します。

例外

ArgumentNullException: dataSetまたはrefCursorパラメータがNULLです。

InvalidOperationException: OracleRefCursorはすでにデータのフェッチに使用されたか、またはソース・テーブル名が無効です。

NotSupportedException: SafeMappingタイプはサポートされていません。

備考

スキームまたは情報は、MissingSchemaAction.AddWithKeyに設定されたMissingSchemaActionFillメソッドがコールされた場合、指定されません。

Fill(DataSet, int, int, string, OracleRefCursor)

このメソッドは、DataSetに指定された範囲に行を追加またはリフレッシュして、指定されたOracleRefCursorオブジェクトに行を一致させます。

宣言

// C#
public int Fill(DataSet dataSet, int startRecord, int maxRecords,
   string srcTable, OracleRefCursor refCursor);

パラメータ

戻り値

このメソッドは、DataSetに追加またはリフレッシュされた行数を戻します。これには、行を戻さない文の影響を受ける行は含まれません。

例外

ArgumentNullException: dataSetまたはrefCursorパラメータがNULLです。

InvalidOperationException: OracleRefCursorはすでにデータのフェッチに使用されたか、またはソース・テーブル名が無効です。

NotSupportedException: SafeMappingタイプはサポートされていません。

備考

スキームまたは情報は、MissingSchemaAction.AddWithKeyに設定されたMissingSchemaActionFillメソッドがコールされた場合、指定されません。


OracleDataAdapterイベント

OracleDataAdapterイベントのリストを、表5-37に示します。

表5-37 OracleDataAdapterイベント

イベント名 説明

Disposed

System.ComponentModel.Componentからの継承

FillError

System.Data.Common.DbDataAdapterからの継承

RowUpdated

このイベントは、Update()メソッドによって行が更新された場合に発生します

RowUpdating

このイベントは、データベースに行データを更新するときに発生します


RowUpdated

このイベントは、Update()メソッドで行が更新された場合に発生します。

宣言

// C#
public event OracleRowUpdatedEventHandler RowUpdated;

イベント・データ

イベント・ハンドラはOracleRowUpdatedEventArgsオブジェクトを受信し、イベントに関する情報を含む次のプロパティが、オブジェクトにより公開されます。

次の例では、RowUpdatingイベントおよびRowUpdatedイベントの使用方法を示します。

// C#

using System;
using System.Data;
using Oracle.DataAccess.Client;

class RowUpdatedSample
{
  // Event handler for RowUpdating event
  protected static void OnRowUpdating(object sender,
                                      OracleRowUpdatingEventArgs e)
  {
    Console.WriteLine("Row updating.....");
    Console.WriteLine("Event arguments:");
    Console.WriteLine("Command Text: " + e.Command.CommandText);
    Console.WriteLine("Command Type: " + e.StatementType);
    Console.WriteLine("Status: " + e.Status);
  }

  // Event handler for RowUpdated event
  protected static void OnRowUpdated(object sender,
                                     OracleRowUpdatedEventArgs e)
  {
    Console.WriteLine("Row updated.....");
    Console.WriteLine("Event arguments:");
    Console.WriteLine("Command Text: " + e.Command.CommandText);
    Console.WriteLine("Command Type: " + e.StatementType);
    Console.WriteLine("Status: " + e.Status);
  }

  static void Main()
  {
    string constr = "User Id=scott;Password=tiger;Data Source=oracle";
    string cmdstr = "SELECT EMPNO, ENAME, SAL FROM EMP";

    // Create the adapter with the selectCommand txt and the
    // connection string
    OracleDataAdapter adapter = new OracleDataAdapter(cmdstr, constr);

    // Create the builder for the adapter to automatically generate
    // the Command when needed
    OracleCommandBuilder builder = new OracleCommandBuilder(adapter);

    // Create and fill the DataSet using the EMP
    DataSet dataset = new DataSet();
    adapter.Fill(dataset, "EMP");

    // Get the EMP table from the dataset
    DataTable table = dataset.Tables["EMP"];

    // Indicate DataColumn EMPNO is unique
    // This is required by the OracleCommandBuilder to update the EMP table
    table.Columns["EMPNO"].Unique = true;

    // Get the first row from the EMP table
    DataRow row = table.Rows[0];

    // Update the salary
    double sal = double.Parse(row["SAL"].ToString());
    row["SAL"] = sal + .01;

    // Set the event handlers for the RowUpdated and the RowUpdating event
    // the OnRowUpdating() method will be triggered before the update, and
    // the OnRowUpdated() method will be triggered after the update
    adapter.RowUpdating += new OracleRowUpdatingEventHandler(OnRowUpdating);
    adapter.RowUpdated += new OracleRowUpdatedEventHandler(OnRowUpdated);

    // Now update the EMP using the adapter
    // The OracleCommandBuilder will create the UpdateCommand for the
    // adapter to update the EMP table
    // The OnRowUpdating() and the OnRowUpdated() methods will be triggered
    adapter.Update(dataset, "EMP");
  }
}

RowUpdating

このイベントは、データベースに行データを更新するときに発生します。

宣言

// C#
public event OracleRowUpdatingEventHandler RowUpdating;

イベント・データ

イベント・ハンドラはOracleRowUpdatingEventArgsオブジェクトを受信し、イベントに関する情報を含む次のプロパティが、オブジェクトにより公開されます。

RowUpdatedイベントの例では、RowUpdatingイベントの使用方法も表示されています。RowUpdatedイベントの「例」を参照してください。