| Oracle® Data Provider for .NET開発者ガイド リリース9.2.0.4 部品番号 B13807-01 |
|
Oracle.DataAccess.Clientネームスペース、3/30
OracleCommandBuilderオブジェクトは、データベースが更新された際に、OracleDataAdapterに対して自動SQL生成を実行します。
Object
MarshalByRefObject
Component
OracleCommandBuilder
// C# public sealed class OracleCommandBuilder : Component
インスタンス・メソッドではスレッド・セーフティを保証しませんが、すべてのpublic staticメソッドはスレッド・セーフです。
OracleCommandBuilderは、OracleDataAdapterのSelectCommandプロパティが設定されると、1つの表を更新するSQL文を自動的に生成します。DataSetに複数の表が含まれる場合は、例外がスローされます。DataAdapterプロパティが設定されると、RowUpdatingのイベントのリスナーとして、OracleCommandBuilder自体が登録されます。一度に相互に関連付けることができるOracleDataAdapterオブジェクトとOracleCommandBuilderオブジェクトは、それぞれ1つずつです。
INSERT文、UPDATE文またはDELETE文を生成するために、OracleCommandBuilderはDataSet内でExtendedPropertiesを使用して必要なメタデータ・セットを取得します。最初の更新の後など、メタデータが取得された後でSelectCommandが変更された場合は、RefreshSchemaメソッドをコールしてメタデータを更新する必要があります。
最初に、OracleCommandBuilderはDataSetのExtendedPropertiesからメタデータを検索します。メタデータが使用できない場合、OracleCommandBuilderはOracleDataAdapterのSelectCommandプロパティを使用してメタデータを取得します。
この項のOracleCommandBuilderの例は、次のように定義された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
次の例では、OracleCommandBuilderオブジェクトを使用して、OracleDataAdapter.Update()がコールされたときにOracleDataAdapterオブジェクトに対するUpdateCommandを作成しています。
// C# public static void BuilderUpdate(string connStr) { string cmdStr = "SELECT EMPNO, EMPNAME, JOBDESCRIPTION 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 builder for the adapter to automatically generate //the Command when needed OracleCommandBuilder builder = new OracleCommandBuilder(adapter); //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 job description in the first row row0["JOBDESCRIPTION"] = "MANAGER"; //Now update the EMPINFO using the adapter, the job description //of 'KING' is changed to 'MANAGER' //The OracleCommandBuilder will create the UpdateCommand for the //adapter to update the EMPINFO table adapter.Update(dataset, "EMPINFO"); }
ネームスペース: Oracle.DataAccess.Client
アセンブリ: Oracle.DataAccess.dll
OracleCommandBuilderのメンバーを次の表に示します。
OracleCommandBuilderのコンストラクタを表4-8に示します。
| コンストラクタ | 説明 |
|---|---|
|
OracleCommandBuilderクラスの新規インスタンスをインスタンス化します(オーバーロード)。 |
OracleCommandBuilderのstaticメソッドを表4-9に示します。
| メソッド | 説明 |
|---|---|
|
|
|
OracleCommandBuilderのプロパティを表4-10に示します。
| 名前 | 説明 |
|---|---|
|
|
|
|
SQL文が生成される |
|
|
SQL文を生成する際に、Oracleのオブジェクト名を二重引用符で囲むかどうかを示します。 |
|
|
|
|
OracleCommandBuilderのpublicメソッドを表4-11に示します。
OracleCommandBuilderのイベントを表4-12に示します。
| イベント名 | 説明 |
|---|---|
|
|
|
OracleCommandBuilderのイベント・デリゲートを表4-13に示します。
| イベント・デリゲート名 | 説明 |
|---|---|
|
|
|
OracleCommandBuilderのコンストラクタは、OracleCommandBuilderクラスの新規インスタンスを作成します。
このコンストラクタは、OracleCommandBuilderクラスのインスタンスを作成します。
このコンストラクタは、OracleCommandBuilderクラスのインスタンスを作成し、DataAdapterプロパティを指定されたOracleDataAdapterオブジェクトに設定します。
このコンストラクタは、OracleCommandBuilderクラスのインスタンスを作成します。
// C# public OracleCommandBuilder();
デフォルトのコンストラクタです。
このコンストラクタは、OracleCommandBuilderクラスのインスタンスを作成し、DataAdapterプロパティを指定されたOracleDataAdapterオブジェクトに設定します。
// C# public OracleCommandBuilder(OracleDataAdapter da);
OracleCommandBuilderのstaticメソッドを表4-14に示します。
| メソッド | 説明 |
|---|---|
|
|
|
OracleCommandBuilderのプロパティを表4-15に示します。
| 名前 | 説明 |
|---|---|
|
|
|
|
SQL文が生成される |
|
|
SQL文を生成する際に、Oracleのオブジェクト名を二重引用符で囲むかどうかを示します。 |
|
|
|
|
このプロパティは、SQL文が生成されるOracleDataAdapterを示します。
// C# OracleDataAdapter DataAdapter{get; set;}
OracleDataAdapter
デフォルトはnullです。
このプロパティは、SQL文を生成する際に、Oracleのオブジェクト名(表または列など)を二重引用符で囲むかどうかを示します。
// C# bool CaseSensitive {get; set;}
二重引用符を使用するかどうかを示すbool
デフォルトはfalseです。
OracleCommandBuilderのpublicメソッドを表4-16に示します。
このメソッドは、アプリケーションがOracleDataAdapterでUpdate()をコールした際に、データベースでの削除をSQL文(CommandText)で実行する、自動生成されたOracleCommandオブジェクトを取得します。
// C# public OracleCommand GetDeleteCommand();
OracleCommand
ObjectDisposedException: OracleCommandBuilderオブジェクトはすでに破棄されています。
InvalidOperationException: SelectCommandプロパティまたはDataAdapterプロパティのいずれかがnullであるか、またはOracleDataAdapterのSelectCommandプロパティから主キーを取得することができません。
このメソッドは、アプリケーションがOracleDataAdapterでUpdate()をコールした際に、データベースでの挿入をSQL文(CommandText)で実行する、自動生成されたOracleCommandオブジェクトを取得します。
// C# public OracleCommand GetInsertCommand();
OracleCommand
ObjectDisposedException: OracleCommandBuilderオブジェクトはすでに破棄されています。
InvalidOperationException: SelectCommandプロパティまたはDataAdapterプロパティのいずれかがnullであるか、またはOracleDataAdapterのSelectCommandプロパティから主キーを取得することができません。
このメソッドは、アプリケーションがOracleDataAdapterでUpdate()をコールした際に、データベースでの更新をSQL文(CommandText)で実行する、自動生成されたOracleCommandオブジェクトを取得します。
// C# public OracleCommand GetUpdateCommand();
OracleCommand
ObjectDisposedException: OracleCommandBuilderオブジェクトはすでに破棄されています。
InvalidOperationException: SelectCommandプロパティまたはDataAdapterプロパティのいずれかがnullであるか、またはOracleDataAdapterのSelectCommandプロパティから主キーを取得することができません。
このメソッドは、INSERT文、UPDATE文またはDELETE文の生成に使用するデータベース・スキーマ情報をリフレッシュします。
// C# public void RefreshSchema();
OracleDataAdapterのSelectCommandの値を変更すると、必ずアプリケーションによりRefreshSchemaがコールされます。
OracleCommandBuilderのイベントを表4-17に示します。
| イベント名 | 説明 |
|---|---|
|
|
|
OracleCommandBuilderのイベント・デリゲートを表4-18に示します。
| イベント・デリゲート名 | 説明 |
|---|---|
|
|
|
|
|
![]() Copyright © 2002, 2003 Oracle Corporation. All Rights Reserved. |
|