| Oracle® Data Provider for .NET開発者ガイド リリース9.2.0.4 部品番号 B13807-01 |
|
Oracle.DataAccess.Clientネームスペース、5/30
OracleDataAdapterオブジェクトは、DataSetにデータを移入し、DataSetでの変更をOracleデータベースに反映するデータ・プロバイダ・オブジェクトを表します。
Object
MarshalByRefObject
Component
DataAdapter
DbDataAdapter
OracleDataAdapter
// C# public sealed class OracleDataAdapter : DbDataAdapter, IDbDataAdapter
インスタンス・メソッドではスレッド・セーフティを保証しませんが、すべてのpublic staticメソッドはスレッド・セーフです。
この項のOracleDataAdapterの例は、次のように定義されたEMPINFO表を基にしています。
CREATE TABLE empInfo ( empno NUMBER(4) PRIMARY KEY, empName VARCHAR2(20) NOT NULL, hiredate DATE, salary NUMBER(7,2), jobDescription Clob, byteCodes BLOB );
EMPINFO表には、次の値が含まれています。
EMPNO EMPNAME HIREDATE SALARY JOBDESCRIPTION BYTECODES (Hex Values) ===== ======= ======== ====== ============== ============ 1 KING 01-MAY-81 12345.67 SOFTWARE ENGR {0x12, 0x34} 2 SCOTT 01-SEP-75 34567.89 MANAGER {0x56, 0x78} 3 BLAKE 01-OCT-90 9999.12 TRANSPORT {0x23, 0x45} 4 SMITH NULL NULL NULL NULL
次の例では、OracleDataAdapterおよびデータセットを使用して、EMPINFO表を更新しています。
// C# public static void AdapterUpdate(string connStr) { string cmdStr = "SELECT EMPNO, EMPNAME, SALARY FROM EMPINFO"; //create the adapter with the selectCommand txt and the //connection string OracleDataAdapter adapter = new OracleDataAdapter(cmdStr, connStr); //get the connection from the adapter OracleConnection connection = adapter.SelectCommand.Connection; //create the UpdateCommand object for updating the EMPINFO table //from the dataset adapter.UpdateCommand = new OracleCommand("UPDATE EMPINFO SET SALARY = "+ " :iSALARY where EMPNO = :iEMPNO", connection); adapter.UpdateCommand.Parameters.Add(":iSALARY", OracleDbType.Double, 0, "SALARY"); adapter.UpdateCommand.Parameters.Add(":iEMPNO", OracleDbType.Int16, 0, "EMPNO"); //Create and fill the DataSet using the EMPINFO DataSet dataset = new DataSet(); adapter.Fill(dataset, "EMPINFO"); //Get the EMPINFO table from the dataset DataTable table = dataset.Tables["EMPINFO"]; //Get the first row from the EMPINFO table DataRow row0 = table.Rows[0]; //update the salary in the first row row0["SALARY"] = 99999.99; //Now update the EMPINFO using the adapter, the salary //of 'KING' is changed to 99999.99 adapter.Update(dataset, "EMPINFO"); }
ネームスペース: Oracle.DataAccess.Client
アセンブリ: Oracle.DataAccess.dll
OracleDataAdapterのメンバーを次の表に示します。
OracleDataAdapterのコンストラクタを表4-31に示します。
| コンストラクタ | 説明 |
|---|---|
|
OracleDataAdapterクラスの新規インスタンスをインスタンス化します(オーバーロード)。 |
OracleDataAdapterのstaticメソッドを表4-32に示します。
| メソッド | 説明 |
|---|---|
|
|
|
OracleDataAdapterのプロパティを表4-33に示します。
OracleDataAdapterのpublicメソッドを表4-34に示します。
OracleDataAdapterのイベントを表4-35に示します。
| イベント・デリゲート名 | 説明 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
OracleDataAdapterのイベント・デリゲートを表4-36に示します。
| イベント・デリゲート名 | 説明 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
OracleDataAdapterのコンストラクタは、OracleDataAdapterクラスの新規インスタンスを作成します。
このコンストラクタは、OracleDataAdapterクラスのインスタンスを作成します。
このコンストラクタは、指定されたOracleCommandをSelectCommandとして使用して、OracleDataAdapterクラスのインスタンスを作成します。
このコンストラクタは、指定されたOracleConnectionオブジェクトおよびSelectCommandのコマンド・テキストを使用して、OracleDataAdapterクラスのインスタンスを作成します。
このコンストラクタは、指定された接続文字列およびSelectCommandのコマンド・テキストを使用して、OracleDataAdapterクラスのインスタンスを作成します。
このコンストラクタは、引数を使用せずにOracleDataAdapterクラスのインスタンスを作成します。
// C# public OracleDataAdapter();
次のOracleDataAdapterプロパティの初期値は、次のように設定されます。
MissingMappingAction = MissingMappingAction.Passthrough
MissingSchemaAction = MissingSchemaAction.Add
このコンストラクタは、指定されたOracleCommandをSelectCommandとして使用して、OracleDataAdapterクラスのインスタンスを作成します。
// C# public OracleDataAdapter(OracleCommand selectCommand);
次のOracleDataAdapterプロパティの初期値は、次のように設定されます。
MissingMappingAction = MissingMappingAction.Passthrough
MissingSchemaAction = MissingSchemaAction.Add
このコンストラクタは、指定されたOracleConnectionオブジェクトおよびSelectCommandのコマンド・テキストを使用して、OracleDataAdapterクラスのインスタンスを作成します。
// C# public OracleDataAdapter(string selectCommandText, OracleConnection selectConnection);
selectCommandText
OracleDataAdapterのSelectCommandプロパティのCommandTextとして設定される文字列。
selectConnection
Oracleデータベースに接続するためのOracleConnection。
まだオープンされていない場合は、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のstaticメソッドを表4-37に示します。
| メソッド | 説明 |
|---|---|
|
|
|
OracleDataAdapterのプロパティを表4-38に示します。
このプロパティは、Oracleデータベースから行を削除するSQL文またはストアド・プロシージャです。
// C# public OracleCommand DeleteCommand {get; set;}
Updateのコール中に、DataSetで削除された行に対応して、Oracleデータベースの表から行を削除するために使用されるOracleCommand
デフォルトはnullです。
DataSetに主キー情報が存在する場合、コマンドが指定されていなければ、OracleCommandBuilderを使用してDeleteCommandを自動的に生成することができます。
このプロパティは、Oracleデータベースに新規の行を挿入するSQL文またはストアド・プロシージャです。
// C# public OracleCommand InsertCommand {get; set;}
Updateのコール中に、DataSetに挿入された行に対応して、表に行を挿入するために使用されるOracleCommand
デフォルトはnullです。
DataSetに主キー情報が存在する場合、コマンドが指定されていなければ、OracleCommandBuilderを使用してInsertCommandを自動的に生成することができます。
このプロパティは、Fillへの次のコールでSelectCommandが再実行されるかどうかを判断します。
// C# public Boolean Requery {get; set;}
Fillへの次のコールでSelectCommandが再実行される場合、trueを返し、それ以外の場合、falseを返します。
このプロパティは、データを保持するために、結果セットの列名とDataSetの列の値を表す.NET型との間にマッピングを作成します。
// C# public Hashtable SafeMapping {get; set;}
ハッシュテーブル
デフォルトはnullです。
次の型でデータを保持するため、必要に応じてSafeMappingプロパティが使用されます。
// C# // The following example shows how to use the SafeMapping property to fill the // dataset public static void UseSafeMapping( string connStr) { //In this SELECT statement, EMPNO, HIREDATE and SALARY must be //preserved using safe type mapping. string cmdStr = "SELECT EMPNO, EMPNAME, HIREDATE, SALARY FROM EMPINFO"; //create the adapter with the selectCommand txt and the connection string OracleDataAdapter adapter = new OracleDataAdapter(cmdStr, connStr); //get the connection from the adapter OracleConnection connection = adapter.SelectCommand.Connection; //create the safe type mapping for the adapter //which can safely map column data to byte arrays, where // applicable. By executing the following statement, EMPNO, HIREDATE AND //SALARY columns will be mapped to byte[] adapter.SafeMapping.Add("*", typeof(byte[])); //Map HIREDATE to a string //If the column name in the EMPINFO table is case-sensitive, //the safe type mapping column name must be case-sensitive. adapter.SafeMapping.Add("HIREDATE", typeof(string)); //Map EMPNO to a string //If the column name in the EMPINFO table is case-sensitive, //the safe type mapping column name must also be case-sensitive. adapter.SafeMapping.Add("EMPNO", typeof(string)); //Create and fill the DataSet using the EMPINFO DataSet dataset = new DataSet(); adapter.Fill(dataset, "EMPINFO"); //Get the EMPINFO table from the dataset DataTable table = dataset.Tables["EMPINFO"]; //Get the first row from the EMPINFO table DataRow row0 = table.Rows[0]; //Print out the row info Console.WriteLine("EMPNO Column: type = " + row0["EMPNO"].GetType() + "; value = " + row0["EMPNO"]); Console.WriteLine("EMPNAME Column: type = " + row0["EMPNAME"].GetType() + "; value = " + row0["EMPNAME"]); Console.WriteLine("HIREDATE Column: type = " + row0["HIREDATE"].GetType()+ "; value = " + row0["HIREDATE"]); Console.WriteLine("SALARY Column: type = " + row0["SALARY"].GetType() + "; value = " + row0["SALARY"]); }
出力:
EMPNO Column: type = System.String; value = 1 EMPNAME Column: type = System.String; value = KING HIREDATE Column: type = System.String; value = 01-MAY-81 SALARY Column: type = System.Byte[]; value = System.Byte[]
このプロパティは、単一または複数の結果セットを返すSQL文またはストアド・プロシージャです。
// C# public OracleCommand SelectCommand {get; set;}
Fillのコール中に、選択された行をDataSetに移入するために使用されるOracleCommand
デフォルトはnullです。
SelectCommandが行をまったく返さない場合は、データセットに表は追加されず、例外は発生しません。
SELECT文の選択先がVIEWの場合、FillSchema()またはFill()がMissingSchemaAction.AddWithKeyとともにコールされると、キー情報は取得されません。
このプロパティは、DataSetからOracleデータベースに行を更新するSQL文またはストアド・プロシージャです。
// C# public OracleCommand UpdateCommand {get; set;}
Updateのコール中に、DataSetで更新された行に対応して、Oracleデータベースの行を更新するために使用されるOracleCommand
デフォルトはnullです。
DataSetに主キー情報が存在する場合、このプロパティに対してコマンドが指定されていなければ、OracleCommandBuilderを使用してUpdateCommandを自動的に生成することができます。
OracleDataAdapterのpublicメソッドを表4-39に示します。
Fillは、指定されたDataTableまたはDataSetにデータを移入するか、リフレッシュします。
このメソッドは、指定されたOracleRefCursorオブジェクトのデータに一致するよう指定されたDataTableで行を追加またはリフレッシュします。
このメソッドは、指定されたOracleRefCursorオブジェクトのデータに一致するようDataSetで行を追加またはリフレッシュします。
このメソッドは、指定されたOracleRefCursorオブジェクトのデータに一致するようDataSetの指定されたソース表で行を追加またはリフレッシュします。
このメソッドは、指定されたOracleRefCursorオブジェクトの行に一致するようDataSetの指定された範囲で行を追加またはリフレッシュします。
このメソッドは、指定されたOracleRefCursorオブジェクトのデータに一致するよう指定されたDataTableで行を追加またはリフレッシュします。
// C# public int Fill(DataTable dataTable, OracleRefCursor refCursor);
DataTableで追加またはリフレッシュされた行数
ArgumentNullException: dataTableまたはrefCursorパラメータがnullです。
InvalidOperationException: OracleRefCursorがデータをフェッチするためにすでに使用されています。
NotSupportedException: SafeMapping型がサポートされていません。
MissingSchemaActionをMissingSchemaAction.AddWithKeyに設定してFillメソッドがコールされている場合でも、スキーマまたはキー情報は提供されません。
このメソッドは、指定された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をMissingSchemaAction.AddWithKeyに設定してFillメソッドがコールされている場合でも、スキーマまたはキー情報は提供されません。
このメソッドは、指定されたOracleRefCursorオブジェクトのデータに一致するようDataSetの指定されたソース表で行を追加またはリフレッシュします。
// C# public int Fill(DataSet dataSet, string srcTable, OracleRefCursor refCursor);
DataSetで追加またはリフレッシュされた行数を返します。
ArgumentNullException: dataSetまたはrefCursorパラメータがnullです。
InvalidOperationException: OracleRefCursorがデータをフェッチするためにすでに使用されているか、またはソース表名が無効です。
NotSupportedException: SafeMapping型がサポートされていません。
MissingSchemaActionをMissingSchemaAction.AddWithKeyに設定してFillメソッドがコールされている場合でも、スキーマまたはキー情報は提供されません。
このメソッドは、指定されたOracleRefCursorオブジェクトの行に一致するようDataSetの指定された範囲で行を追加またはリフレッシュします。
// 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をMissingSchemaAction.AddWithKeyに設定してFillメソッドがコールされている場合でも、スキーマまたはキー情報は提供されません。
OracleDataAdapterのイベントを表4-40に示します。
| イベント名 | 説明 |
|---|---|
|
|
|
|
|
|
|
このイベントは、 |
|
|
このイベントは、行データがデータベースに更新されようとしているときに起動されます。 |
このイベントは、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# // create the 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); } // create the 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); } public static void AdapterEvents(string connStr) { string cmdStr = "SELECT EMPNO, EMPNAME, SALARY FROM EMPINFO"; //create the adapter with the selectCommand txt and the //connection string OracleDataAdapter adapter = new OracleDataAdapter(cmdStr, connStr); //get the connection from the adapter OracleConnection connection = adapter.SelectCommand.Connection; //create the UpdateCommand object for updating the EMPINFO table //from the dataset adapter.UpdateCommand = new OracleCommand("UPDATE EMPINFO SET SALARY = "+ " :iSALARY where EMPNO = :iEMPNO", connection); adapter.UpdateCommand.Parameters.Add(":iSALARY", OracleDbType.Double, 0, "SALARY"); adapter.UpdateCommand.Parameters.Add(":iEMPNO", OracleDbType.Int16, 0, "EMPNO"); //Create and fill the DataSet using the EMPINFO DataSet dataset = new DataSet(); adapter.Fill(dataset, "EMPINFO"); //Get the EMPINFO table from the dataset DataTable table = dataset.Tables["EMPINFO"]; //Get the first row from the EMPINFO table DataRow row0 = table.Rows[0]; //update the salary in the first row row0["SALARY"] = 99999.99; //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 EMPINFO using the adapter, the salary //of 'KING' is changed to 99999.99 //The OnRowUpdating() and the OnRowUpdated() methods will be triggered adapter.Update(dataset, "EMPINFO"); }
このイベントは、行データがデータベースに更新されようとしているときに起動されます。
// 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イベントの「例」を参照してください。
OracleDataAdapterのイベント・デリゲートを表4-41に示します。
| イベント・デリゲート名 | 説明 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
このイベント・デリゲートは、RowUpdatedイベントを処理します。
このイベント・デリゲートは、RowUpdatingイベントを処理します。
|
|
![]() Copyright © 2002, 2003 Oracle Corporation. All Rights Reserved. |
|