OracleDataAdapter クラス
アセンブリ: System.Data.OracleClient (system.data.oracleclient.dll 内)

Public NotInheritable Class OracleDataAdapter Inherits DbDataAdapter Implements IDbDataAdapter, IDataAdapter, ICloneable
public ref class OracleDataAdapter sealed : public DbDataAdapter, IDbDataAdapter, IDataAdapter, ICloneable

OracleDataAdapter は、DataSet とデータベースの間でデータを取得および保存するための、ブリッジの役割を果たします。OracleDataAdapter は、このブリッジを提供するために、データベース内のデータを DataSet に読み込む Fill、および DataSet での変更をデータベースに送り返す Update を使用します。
OracleDataAdapter は、DataSet にデータを読み込むときに、返されたデータを格納するテーブルおよび列が存在しない場合は、それらを作成します。ただし、MissingSchemaAction プロパティを AddWithKey に設定しない限り、暗黙的に作成されたスキーマには主キー情報は設定されません。DataSet にデータを格納する前に、FillSchema を使用して、主キー情報を含むスキーマを OracleDataAdapter に作成させることもできます。詳細については、「DataSet への既存の制約の追加」を参照してください。
![]() |
---|
既定では、Fill を使用して DataTable にインポートされる数値フィールドは、OracleNumber オブジェクトに割り当てられます。OracleNumber の有効桁数の制限に対して大きすぎるか桁数が多すぎるかのいずれかである非整数値をインポートすることで、OracleNumber をオーバーフローさせて Oracle の例外をスローできます。詳細については、OracleNumber の説明を参照してください。 |
OracleDataAdapter には、データの読み込みと更新を効率的に行うために、SelectCommand、InsertCommand、DeleteCommand、UpdateCommand、TableMappings の各プロパティも用意されています。
.NET Framework Oracle 用データ プロバイダは、バッチ SQL ステートメントをサポートしません。ただし、複数の REF CURSOR 出力パラメータを使用して、各 DataTable の DataSet にデータを格納できます。パラメータを定義し、定義したパラメータを出力パラメータとしてマークし、REF CURSOR データ型であることを示す必要があります。OracleDataAdapter が、ストアド プロシージャで返される REF CURSOR パラメータを使用して格納されている場合、Update メソッドは使用できません。Oracle では SQL ステートメントの実行時にテーブル名と列名を判別するために必要な情報が提供されないためです。次の C# の例は、このストアド プロシージャが既に作成されていることを前提としています。
Oracle サーバーで、次の Oracle パッケージを作成します。
CREATE OR REPLACE PACKAGE CURSPKG AS TYPE T_CURSOR IS REF CURSOR; PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER, IO_CURSOR OUT T_CURSOR); PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR, DEPTCURSOR OUT T_CURSOR); END CURSPKG; /
Oracle サーバーで、次の Oracle パッケージ本体を作成します。
CREATE OR REPLACE PACKAGE BODY CURSPKG AS PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER, IO_CURSOR OUT T_CURSOR) IS V_CURSOR T_CURSOR; BEGIN IF N_EMPNO <> 0 THEN OPEN V_CURSOR FOR SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO AND EMP.EMPNO = N_EMPNO; ELSE OPEN V_CURSOR FOR SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO; END IF; IO_CURSOR := V_CURSOR; END OPEN_ONE_CURSOR; PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR, DEPTCURSOR OUT T_CURSOR) IS V_CURSOR1 T_CURSOR; V_CURSOR2 T_CURSOR; BEGIN OPEN V_CURSOR1 FOR SELECT * FROM EMP; OPEN V_CURSOR2 FOR SELECT * FROM DEPT; EMPCURSOR := V_CURSOR1; DEPTCURSOR := V_CURSOR2; END OPEN_TWO_CURSORS; END CURSPKG; /
ストアド プロシージャを使用してテーブルと列の情報を取得する C# の例を次に示します。
// GetConnectionString() returns a connection string for // the data source. string connString = GetConnectionString(); DataSet ds = new DataSet(); OracleConnection conn = new OracleConnection(connString); OracleCommand cmd = conn.CreateCommand(); cmd.CommandText = "CURSPKG.OPEN_TWO_CURSORS"; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("EMPCURSOR", OracleType.Cursor).Direction = ParameterDirection.Output; cmd.Parameters.Add("DEPTCURSOR", OracleType.Cursor).Direction = ParameterDirection.Output; OracleDataAdapter da = new OracleDataAdapter(cmd); da.TableMappings.Add("Table", "Emp"); da.TableMappings.Add("Table1", "Dept"); da.Fill(ds); ds.Relations.Add("EmpDept", ds.Tables["Dept"].Columns["Deptno"], ds.Tables["Emp"].Columns["Deptno"], false);
OracleDataAdapter で、Oracle の REF CURSOR を使用して DataSet にデータを格納する Visual Basic の例を次に示します。この例では、Oracle の Scott/Tiger スキーマで定義されたテーブルを使用し、次の PL/SQL パッケージとパッケージ本体を必要とします。例で使用するために、これらをサーバー側で作成する必要があります。
Oracle サーバーで、次の Oracle パッケージを作成します。
CREATE OR REPLACE PACKAGE CURSPKG AS TYPE T_CURSOR IS REF CURSOR; PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER, IO_CURSOR OUT T_CURSOR); PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR, DEPTCURSOR OUT T_CURSOR); END CURSPKG; /
Oracle サーバーで、次の Oracle パッケージ本体を作成します。
CREATE OR REPLACE PACKAGE BODY CURSPKG AS PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER, IO_CURSOR OUT T_CURSOR) IS V_CURSOR T_CURSOR; BEGIN IF N_EMPNO <> 0 THEN OPEN V_CURSOR FOR SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO AND EMP.EMPNO = N_EMPNO; ELSE OPEN V_CURSOR FOR SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO; END IF; IO_CURSOR := V_CURSOR; END OPEN_ONE_CURSOR; PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR, DEPTCURSOR OUT T_CURSOR) IS V_CURSOR1 T_CURSOR; V_CURSOR2 T_CURSOR; BEGIN OPEN V_CURSOR1 FOR SELECT * FROM EMP; OPEN V_CURSOR2 FOR SELECT * FROM DEPT; EMPCURSOR := V_CURSOR1; DEPTCURSOR := V_CURSOR2; END OPEN_TWO_CURSORS; END CURSPKG; /
この Visual Basic の例では、2 つの REF CURSOR パラメータを返すストアド プロシージャを実行し、返された行のデータを DataSet に格納します。
' GetConnectionString() returns a connection string for ' the data source. Dim connString As New String(GetConnectionString()) Dim ds As New DataSet() Dim conn As New OracleConnection(connString) Dim cmd As OracleCommand = conn.CreateCommand() cmd.CommandText = "CURSPKG.OPEN_TWO_CURSORS" cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.Add("EMPCURSOR", OracleType.Cursor).Direction = _ ParameterDirection.Output cmd.Parameters.Add("DEPTCURSOR", OracleType.Cursor).Direction = _ ParameterDirection.Output Dim da As New OracleDataAdapter(cmd) da.TableMappings.Add("Table", "Emp") da.TableMappings.Add("Table1", "Dept") da.Fill(ds) ds.Relations.Add("EmpDept", ds.Tables("Dept").Columns("Deptno"), _ ds.Tables("Emp").Columns("Deptno"), False)
OracleDataAdapter を使用して Fill または FillSchema 操作を実行すると、DataColumn.ReadOnly プロパティは、列が更新できるかどうかに関係なく、常に false を返します。Oracle サーバーからはこの情報が返されないためです。

System.MarshalByRefObject
System.ComponentModel.Component
System.Data.Common.DataAdapter
System.Data.Common.DbDataAdapter
System.Data.OracleClient.OracleDataAdapter


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Weblioに収録されているすべての辞書からORACLEDATAADAPTERクラスを検索する場合は、下記のリンクをクリックしてください。

- ORACLEDATAADAPTERクラスのページへのリンク