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コンストラクタのリストを、表5-29に示します。
OracleDataAdapter静的メソッド
OracleDataAdapter静的メソッドのリストを、表5-30に示します。
OracleDataAdapterプロパティ
OracleDataAdapterプロパティのリストを、表5-31に示します。
表5-31 OracleDataAdapterプロパティ
| 名前 | 説明 |
|---|---|
|
|
|
|
|
|
|
|
|
|
Oracle Databaseから行を削除する、SQL文またはストアド・プロシージャ |
|
|
Oracle Databaseに新しい行を挿入する、SQL文またはストアド・プロシージャ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
データを保存するため、.NETタイプに結果セット内の列名間のマッピングを作成します |
|
|
単一または複数の結果セットを戻すSQL文またはストアド・プロシージャ |
|
|
|
|
|
|
|
|
|
バッチ処理サポートを有効または無効にする値を指定し、データベースへの1回のラウンドトリップで実行できるSQL文の数を指定します ADO.NET 2.0準拠のODP.NETでのみサポート |
|
|
OracleDataAdapterパブリック・メソッド
OracleDataAdapterパブリック・メソッドのリストを、表5-32に示します。
表5-32 OracleDataAdapterパブリック・メソッド
| パブリック・メソッド | 説明 |
|---|---|
|
|
|
|
|
|
|
|
|
|
Oracle Database内のデータと一致させるため、 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OracleDataAdapterイベント
OracleDataAdapterイベントのリストを、表5-33に示します。
表5-33 OracleDataAdapterイベント
| イベント名 | 説明 |
|---|---|
|
|
|
|
|
|
|
このイベントは、 |
|
|
このイベントは、データベースに行データを更新するときに発生します |
OracleDataAdapterコンストラクタは、OracleDataAdapterクラスの新規インスタンスを作成します。
オーバーロード・リスト:
このコンストラクタは、OracleDataAdapterクラスのインスタンスを作成します。
OracleDataAdapter(OracleCommand)
このコンストラクタは、SelectCommandとして指定されたOracleCommandでOracleDataAdapterクラスのインスタンスを作成します。
OracleDataAdapter(string, OracleConnection)
このコンストラクタは、指定されたOracleConnectionオブジェクトおよびSelectCommandのコマンド・テキストで、OracleDataAdapterクラスのインスタンスを作成します。
OracleDataAdapter(string, string)
このコンストラクタは、SelectCommandの指定された接続文字列およびコマンド・テキストで、OracleDataAdapterクラスのインスタンスを作成します。
このコンストラクタは、OracleDataAdapterクラスのインスタンスを引数なしで作成します。
宣言
// C# public OracleDataAdapter();
備考
初期値は、OracleDataAdapterプロパティに対して、次に示すように設定されています。
MissingMappingAction = MissingMappingAction.Passthrough
MissingSchemaAction = MissingSchemaAction.Add
このコンストラクタは、SelectCommandとして指定されたOracleCommandでOracleDataAdapterクラスのインスタンスを作成します。
宣言
// C#
public OracleDataAdapter(OracleCommand selectCommand);
パラメータ
selectCommand
OracleCommandは、SelectCommandプロパティとてして設定されます。
備考
初期値は、OracleDataAdapterプロパティに対して、次に示すように設定されています。
MissingMappingAction = MissingMappingAction.Passthrough
MissingSchemaAction = MissingSchemaAction.Add
このコンストラクタは、指定されたOracleConnectionオブジェクトおよびSelectCommandのコマンド・テキストで、OracleDataAdapterクラスのインスタンスを作成します。
宣言
// C# public OracleDataAdapter(string selectCommandText, OracleConnection selectConnection);
パラメータ
selectCommandText
この文字列は、OracleDataAdapterのSelectCommandプロパティのCommandTextとして設定されます。
selectConnection
OracleConnectionは、Oracle Databaseへの接続に使用されます。
備考
OracleDataAdapterは、まだオープンしていない場合、接続をオープンおよびクローズします。接続がオープンしている場合は、明示的にクローズする必要があります。
初期値は、OracleDataAdapterプロパティに対して、次に示すように設定されています。
MissingMappingAction = MissingMappingAction.Passthrough
MissingSchemaAction = MissingSchemaAction.Add
このコンストラクタは、SelectCommandの指定された接続文字列およびコマンド・テキストで、OracleDataAdapterクラスのインスタンスを作成します。
宣言
// C# public OracleDataAdapter(string selectCommandText, string selectConnectionString);
パラメータ
selectCommandText
この文字列は、OracleDataAdapterのSelectCommandプロパティのCommandTextとして設定されます。
selectConnectionString
接続文字列です。
備考
初期値は、OracleDataAdapterプロパティに対して、次に示すように設定されています。
MissingMappingAction = MissingMappingAction.Passthrough
MissingSchemaAction = MissingSchemaAction.Add
OracleDataAdapter静的メソッドのリストを、表5-34に示します。
OracleDataAdapterプロパティのリストを、表5-35に示します。
表5-35 OracleDataAdapterプロパティ
| 名前 | 説明 |
|---|---|
|
|
|
|
|
|
|
|
|
|
Oracle Databaseから行を削除する、SQL文またはストアド・プロシージャ |
|
|
Oracle Databaseに新しい行を挿入する、SQL文またはストアド・プロシージャ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
データを保存するため、.NETタイプに結果セット内の列名間のマッピングを作成します |
|
|
単一または複数の結果セットを戻すSQL文またはストアド・プロシージャ |
|
|
|
|
|
|
|
|
|
バッチ処理サポートを有効または無効にする値を指定し、データベースへの1回のラウンドトリップで実行できるSQL文の数を指定します ADO.NET 2.0準拠のODP.NETでのみサポート |
|
|
このプロパティは、Oracle Databaseから行を削除するSQL文またはストアド・プロシージャです。
宣言
// C#
public OracleCommand DeleteCommand {get; set;}
プロパティ値
DataSet内の削除した行に対応するOracle Databaseの表から行を削除するため、Updateコール中に使用されるOracleCommand
備考
デフォルト = null
DataSet内に主キー情報があり、かつコマンドが指定されていない場合は、OracleCommandBuilderを使用してDeleteCommandが自動的に生成されます。
このプロパティは、Oracle Databaseに新しい行を挿入するSQL文またはストアド・プロシージャです。
宣言
// C#
public OracleCommand InsertCommand {get; set;}
プロパティ値
Updateコール中に使用されるOracleCommandは、DataSet内に追加された行に対応して、表に行を追加します。
備考
デフォルト = null
DataSet内に主キー情報があり、かつコマンドが指定されていない場合は、OracleCommandBuilderを使用してInsertCommandが自動的に生成されます。
このプロパティは、Fillへの次コールでSelectCommandが再実行されるかどうかを決定します。
宣言
// C#
public Boolean Requery {get; set;}
プロパティ値
Fillへの次コールでSelectCommandが再実行される場合はtrueを戻し、それ以外の場合はfalseを戻します。
このプロパティは、FillメソッドがODP.NET固有の値を戻すか、.NET共通言語仕様に準拠した値を戻すかを決定します
ADO.NET 2.0準拠のODP.NETでのみサポート
宣言
// C#
public Boolean ReturnProviderSpecificTypes {get; set;}
プロパティ値
FillメソッドがODP.NET固有の値を戻すかどうかを示す値。 値がfalseの場合は、Fillメソッドが.NET共通言語仕様に準拠した値を返すことを示します。デフォルトはfalseです。
このプロパティでは、データを保存するため、DataSet内の列値を表す.NETタイプに、結果セット内の列名間のマッピングを作成します。
宣言
// C#
public Hashtable SafeMapping {get; set;}
プロパティ値
ハッシュ・テーブル
備考
デフォルト = null
次のタイプのデータを保存するため、必要に応じてSafeMappingプロパティが使用されます。
DATE
TimeStamp(すべてのTimeStampオブジェクトが対象)
INTERVAL DAY TO SECOND
NUMBER
例
詳細は、「OracleDataAdapter Safeタイプ・マッピング」の例を参照してください。
このプロパティは、単一または複数の結果セットを戻すSQL文またはストアド・プロシージャです。
宣言
// C#
public OracleCommand SelectCommand {get; set;}
プロパティ値
Fillコール中にOracleCommandを使用して、選択した行をDataSetに移入します。
備考
デフォルト = null
SelectCommandで戻される行がない場合は、データセットに表は追加されず、例外も発生しません。
SELECT文がVIEWから選択される場合、FillSchema()またはMissingSchemaAction.AddWithKeyのあるFill()が起動されるときに、キー情報は取得されません。
このプロパティは、バッチ処理サポートを有効または無効にする値を指定し、データベースへの1回のラウンドトリップで実行できるSQL文の数を指定します。
ADO.NET 2.0準拠のODP.NETでのみサポート
宣言
// C#
public virtual int UpdateBatchSize {get; set;}
プロパティ値
バッチ・サイズを戻す整数
例外
ArgumentOutOfRangeException: 値が0未満に設定されています。
備考
大量のデータを使用して更新パッチを実行すると、「PLS-00123:プログラムが大きすぎます。」のエラーが発生する場合があります。 このエラーを回避するには、UpdateBatchSizeの値を小さくします。
変更、追加または削除したDataSet内の行ごとに、1つのSQL文がデータベースで実行されます。
値は次のとおりです。
値 = 0
データ・アダプタはすべてのSQL文を単一のデータベース・ラウンドトリップで実行します。
値 = 1: デフォルト値
この値はバッチの更新を無効にし、SQL文は一度に1つずつ実行されます。
値 = n(ただしn > 1)
データ・アダプタは、データベース・ラウンドトリップごとにn行のデータを更新します。
このプロパティは、DataSetからOracle Databaseへ、行を更新するSQL文またはストアド・プロシージャです。
宣言
// C#
public OracleCommand UpdateCommand {get; set;}
プロパティ値
Oracle Database内では、Updateコール中にOracleCommandを使用して行を更新します。更新行はDataSet内で更新された行に対応しています。
備考
デフォルト = null
DataSet内に主キー情報があり、このプロパティにコマンドが指定されていない場合は、OracleCommandBuilderが使用され、UpdateCommandが自動的に生成されます。
OracleDataAdapterパブリック・メソッドのリストを、表5-36に示します。
表5-36 OracleDataAdapterパブリック・メソッド
| パブリック・メソッド | 説明 |
|---|---|
|
|
|
|
|
|
|
|
|
|
Oracle Database内のデータと一致させるため、 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
System. |
|
|
|
|
|
|
Fillは、指定されたDataTableまたはDataSetを移入またはリフレッシュします。
オーバーロード・リスト:
Fill(DataTable, OracleRefCursor)
このメソッドは、指定されたOracleRefCursorオブジェクトに行を一致させるために、指定されたDataTableに追加またはリフレッシュします。
Fill(DataSet, OracleRefCursor)
このメソッドは、OracleRefCursorオブジェクトに行を一致させるために、指定されたDataSetに追加またはリフレッシュします。
Fill(DataSet, string, OracleRefCursor)
このメソッドは、DataSetの指定されたソース・テーブルに行を追加またはリフレッシュして、指定されたOracleRefCursorオブジェクトに行を一致させます。
Fill(DataSet, int, int, string, OracleRefCursor)
このメソッドは、DataSetに指定された範囲に行を追加またはリフレッシュして、指定されたOracleRefCursorオブジェクトに行を一致させます。
このメソッドは、指定されたOracleRefCursorオブジェクトに行を一致させるために、指定されたDataTableに追加またはリフレッシュします。
宣言
// C# public int Fill(DataTable dataTable, OracleRefCursor refCursor);
パラメータ
dataTable
DataTableオブジェクトが移入されました。
refCursor
OracleRefCursorから行が取り出されます。
戻り値
DataTableに行数が追加またはリフレッシュされました。
例外
ArgumentNullException: dataTableまたはrefCursorパラメータがNULLです。
InvalidOperationException: OracleRefCursorはすでにデータのフェッチに使用されました。
NotSupportedException: SafeMappingタイプはサポートされていません。
備考
スキームまたは情報は、MissingSchemaAction.AddWithKeyに設定されたMissingSchemaActionでFillメソッドがコールされた場合、指定されません。
このメソッドは、OracleRefCursorオブジェクトに行を一致させるために、指定されたDataSetに追加またはリフレッシュします。
宣言
// C# public int Fill(DataSet dataSet, OracleRefCursor refCursor);
パラメータ
dataSet
DataSetオブジェクトが移入されました。
refCursor
OracleRefCursorから行が取り出されます。
戻り値
DataSetに追加またはリフレッシュされた行数が戻されました。
例外
ArgumentNullException: dataSetまたはrefCursorパラメータがNULLです。
InvalidOperationException: OracleRefCursorはすでにデータのフェッチに使用されました。
InvalidOperationException: OracleRefCursorはデータをフェッチする準備ができています。
NotSupportedException: SafeMappingタイプはサポートされていません。
備考
リフレッシュするDataTableがない場合、Tableと命名された新しいDataTableが指定されたOracleRefCursorオブジェクトを使用して作成または移入されました。
スキームまたは情報は、MissingSchemaAction.AddWithKeyに設定されたMissingSchemaActionでFillメソッドがコールされた場合、指定されません。
このメソッドは、DataSetの指定されたソース・テーブルに行を追加またはリフレッシュして、指定されたOracleRefCursorオブジェクトに行を一致させます。
宣言
// C# public int Fill(DataSet dataSet, string srcTable, OracleRefCursor refCursor);
パラメータ
dataSet
DataSetオブジェクトが移入されました。
srcTable
ソース・テーブルの名前は表のマッピングに使用されます。
refCursor
OracleRefCursorから行が取り出されます。
戻り値
DataSetに追加またはリフレッシュされた行数を戻します。
例外
ArgumentNullException: dataSetまたはrefCursorパラメータがNULLです。
InvalidOperationException: OracleRefCursorはすでにデータのフェッチに使用されたか、またはソース・テーブル名が無効です。
NotSupportedException: SafeMappingタイプはサポートされていません。
備考
スキームまたは情報は、MissingSchemaAction.AddWithKeyに設定されたMissingSchemaActionでFillメソッドがコールされた場合、指定されません。
このメソッドは、DataSetに指定された範囲に行を追加またはリフレッシュして、指定されたOracleRefCursorオブジェクトに行を一致させます。
宣言
// C# public int Fill(DataSet dataSet, int startRecord, int maxRecords, string srcTable, OracleRefCursor refCursor);
パラメータ
dataSet
DataSetオブジェクトが移入されました。
startRecord
開始するレコード番号です。
maxRecords
取得するレコードの最大数です。
srcTable
ソース・テーブルの名前は表のマッピングに使用されます。
refCursor
OracleRefCursorから行が取り出されます。
戻り値
このメソッドは、DataSetに追加またはリフレッシュされた行数を戻します。これには、行を戻さない文の影響を受ける行は含まれません。
例外
ArgumentNullException: dataSetまたはrefCursorパラメータがNULLです。
InvalidOperationException: OracleRefCursorはすでにデータのフェッチに使用されたか、またはソース・テーブル名が無効です。
NotSupportedException: SafeMappingタイプはサポートされていません。
備考
スキームまたは情報は、MissingSchemaAction.AddWithKeyに設定されたMissingSchemaActionでFillメソッドがコールされた場合、指定されません。
OracleDataAdapterイベントのリストを、表5-37に示します。
表5-37 OracleDataAdapterイベント
| イベント名 | 説明 |
|---|---|
|
|
|
|
|
|
|
このイベントは、 |
|
|
このイベントは、データベースに行データを更新するときに発生します |
このイベントは、Update()メソッドで行が更新された場合に発生します。
宣言
// C# public event OracleRowUpdatedEventHandler RowUpdated;
イベント・データ
イベント・ハンドラはOracleRowUpdatedEventArgsオブジェクトを受信し、イベントに関する情報を含む次のプロパティが、オブジェクトにより公開されます。
Command
Update中に実行されたOracleCommand
Errors(RowUpdatedEventArgsからの継承)
例外がある場合は、Update中に生成
RecordsAffected(RowUpdatedEventArgsからの継承)
Commandの実行によって変更、挿入または削除された行数
Row(RowUpdatedEventArgsからの継承)
Updateに対して送信されるDataRow
StatementType(RowUpdatedEventArgsからの継承)
実行されたSQL文のタイプ
Status(RowUpdatedEventArgsからの継承)
CommandのUpdateStatus
TableMapping(RowUpdatedEventArgsからの継承)
Update中に使用されたDataTableMapping
例
次の例では、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");
}
}
このイベントは、データベースに行データを更新するときに発生します。
宣言
// C# public event OracleRowUpdatingEventHandler RowUpdating;
イベント・データ
イベント・ハンドラはOracleRowUpdatingEventArgsオブジェクトを受信し、イベントに関する情報を含む次のプロパティが、オブジェクトにより公開されます。
Command
Update中に実行されたOracleCommand
Errors(RowUpdatingEventArgsからの継承)
例外がある場合は、Update中に生成
Row(RowUpdatingEventArgsからの継承)
Updateに対して送信されるDataRow
StatementType(RowUpdatingEventArgsからの継承)
実行されたSQL文のタイプ
Status(RowUpdatingEventArgsからの継承)
CommandのUpdateStatus
TableMapping(RowUpdatingEventArgsからの継承)
Update中に使用されたDataTableMapping
例
RowUpdatedイベントの例では、RowUpdatingイベントの使用方法も表示されています。RowUpdatedイベントの「例」を参照してください。