OracleDataAdapter
オブジェクトは、DataSet
を移入し、DataSet
における変更をOracleデータベースに反映させるデータ・プロバイダ・オブジェクトを表します。
クラスの継承
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.0以降
OracleDataAdapter
メンバーは、次の表にリストされています。
OracleDataAdapterコンストラクタ
OracleDataAdapter
コンストラクタを、表5-29にリストします。
OracleDataAdapter静的メソッド
OracleDataAdapter
静的メソッドを、表5-30にリストします。
OracleDataAdapterプロパティ
OracleDataAdapter
プロパティを、表5-31にリストします。
表5-31 OracleDataAdapterプロパティ
プロパティ | 説明 |
---|---|
|
|
|
|
|
|
Oracleデータベースから行を削除する、SQL文またはストアド・プロシージャ |
|
Oracleデータベースに新しい行を挿入する、SQL文またはストアド・プロシージャ |
|
|
|
|
|
|
|
|
|
データを保存するため、.NETタイプに結果セット内の列名間のマッピングを作成します |
|
単一または複数の結果セットを戻すSQL文またはストアド・プロシージャ |
|
|
|
|
|
|
バッチ処理サポートを有効または無効にする値を指定します。また、データベースへの1度のラウンド・トリップ内で実行できるSQL文を指定します。 ADO.NET 2.0準拠のODP.NETでのみサポートされています。 |
|
OracleDataAdapterパブリック・メソッド
OracleDataAdapter
パブリック・メソッドを、表5-32にリストします。
表5-32 OracleDataAdapterパブリック・メソッド
パブリック・メソッド | 説明 |
---|---|
|
|
|
|
|
|
Oracleデータベース内のデータと一致させるため、 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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データベースへの接続に使用されます。
備考
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データベースから行を削除する、SQL文またはストアド・プロシージャ |
|
Oracleデータベースに新しい行を挿入する、SQL文またはストアド・プロシージャ |
|
|
|
|
|
|
|
|
|
データを保存するため、.NETタイプに結果セット内の列名間のマッピングを作成します |
|
単一または複数の結果セットを戻すSQL文またはストアド・プロシージャ |
|
|
|
|
|
|
バッチ処理サポートを有効または無効にする値を指定します。また、データベースへの1度のラウンド・トリップ内で実行できるSQL文を指定します。 ADO.NET 2.0準拠のODP.NETでのみサポートされています。 |
|
このプロパティは、Oracleデータベースから行を削除するSQL文またはストアド・プロシージャです。
宣言
// C# public OracleCommand DeleteCommand {get; set;}
プロパティ値
DataSet
内の削除した行に対応するOracleデータベースの表から行を削除するため、Update
コール中に使用されるOracleCommand
備考
デフォルト = null
DataSet
内に主キー情報があり、かつコマンドが指定されていない場合は、OracleCommandBuilder
を使用してDeleteCommand
が自動的に生成されます。
このプロパティは、Oracleデータベースに新しい行を挿入する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:
Program
too
large"
というエラーが発生する可能性があります。このエラーを回避するため、UpdateBatchSize
のサイズを縮小してより小さな値にします。
変更、追加または削除されているDataSet
内の各行について、1つのSQL文がデータベースで実行されます。
値は次のとおりです。
値 = 0
データ・アダプタは、すべてのSQL文をデータベースへの1回のラウンド・トリップ内で実行します。
値 = 1
: デフォルト値
この値はバッチ更新を無効にし、SQL文を一度に実行します。
n
> 1
、値 = n
データ・アダプタは、データベースへの1回のラウンド・トリップでn
行のデータを更新します。
このプロパティは、DataSet
からOracleデータベースへ、行を更新するSQL文またはストアド・プロシージャです。
宣言
// C# public OracleCommand UpdateCommand {get; set;}
プロパティ値
Oracleデータベース内では、Update
コール中にOracleCommand
を使用して行を更新します。更新行はDataSet
内で更新された行に対応しています。
備考
デフォルト = null
DataSet
内に主キー情報があり、このプロパティにコマンドが指定されていない場合は、OracleCommandBuilder
が使用され、UpdateCommand
が自動的に生成されます。
OracleDataAdapter
パブリック・メソッドを、表5-36にリストします。
表5-36 OracleDataAdapterパブリック・メソッド
パブリック・メソッド | 説明 |
---|---|
|
|
|
|
|
|
Oracleデータベース内のデータと一致させるため、 |
|
|
|
|
|
|
|
|
|
|
|
|
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
イベントの「例」を参照してください。