6.3 OracleCommandBuilderクラス
OracleCommandBuilder
オブジェクトでは、データベースが更新される場合に、OracleDataAdapter
に対して自動SQL生成が行われます。
クラスの継承
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Data.Common.DbCommandBuilder
OracleDataAccess.Client.OracleCommandBuilder
宣言
// C# public sealed class OracleCommandBuilder : DbCommandBuilder
要件
プロバイダ | ODP.NET管理対象外ドライバ | ODP.NET管理対象ドライバ |
---|---|---|
アセンブリ |
|
|
ネームスペース |
|
|
.NET Framework |
3.5, 4.5, 4.6, 4.7 |
4.5, 4.6, 4.7 |
スレッド安全性
パブリック静的メソッドはスレッドセーフですが、インスタンス・メソッドではスレッド安全性は保証されません。
備考
OracleCommandBuilder
では、OracleDataAdapter
のSelectCommand
プロパティが設定されている場合、単一表の更新に対してSQL文が自動的に生成されます。DataSet
に複数の表が含まれている場合、例外がスローされます。DataAdapter
プロパティが設定されている場合は、OracleCommandBuilder
がRowUpdating
イベントのリスナーとして自己登録します。一度に関連付けることができるのは、1つのOracleDataAdapter
オブジェクトと1つのOracleCommandBuilder
オブジェクトのみです。
INSERT
、UPDATE
またはDELETE
文を生成する場合、OracleCommandBuilder
では、必要なメタデータ・セットを取得するため、DataSet
内のExtendedProperties
が使用されます。メタデータの取得後にSelectCommand
が変更された場合(最初の更新後など)、メタデータを更新するためRefreshSchema
メソッドがコールされる必要があります。
OracleCommandBuilder
により、最初にDataSet
のExtendedProperties
のメタデータが検索されます。メタデータがない場合、OracleCommandBuilder
ではOracleDataAdapter
のSelectCommand
プロパティによってメタデータが取得されます。
例
次の例では、EMP
表の更新を実行しています。ここでは、OracleDataAdapter.Update()
がコールされた場合のOracleDataAdapter
オブジェクトに対するUpdateCommand
を作成するために、OracleCommandBuilder
オブジェクトが使用されています。
// C# using System; using System.Data; using Oracle.DataAccess.Client; class OracleCommandBuilderSample { 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"); } }